import itertools def rebuild(h,K): """alternating lighthouse lit at even t; e(2n)=1, e(2n+1)=h_n; return b_1..b_K (initial row) via inverse rule""" T=len(h)*2 d=[1 if t%2==0 else 0 for t in range(T+K+2)] e=[1 if t%2==0 else h[t//2] for t in range(T)] cols={0:d,1:e} for k in range(1,K): x,y=cols[k],cols[k-1]; cols[k+1]=[x[t+1]^(x[t]|y[t]) for t in range(len(x)-1)] return [cols[k][0] for k in range(1,K+1)] N=10 for n in range(0,N): m=n+1 # G_n = b_{2n+3} depends on h_0..h_n table={} for hb in itertools.product((0,1),repeat=m+1): b=rebuild(list(hb),2*n+4) table[hb]=b[2*n+2] # b_{2n+3} (index 2n+2) # check it truly ignores h_{n+1} dep_last=any(table[hb]!=table[hb[:-1]+(1-hb[-1],)] for hb in table) forced=[j for j in range(m) if all(table[hb]==1 for hb in table if hb[j]==1)] zero_frac=sum(1 for v in table.values() if v==0)/len(table) print(f"check G_{n} (= b_{2*n+3}): depends on h_{n+1}? {dep_last}; passing it forces h_j=0 for j in {forced}; fraction of inputs passing: {zero_frac:.3f}")