import numpy as np rng=np.random.default_rng(173) def spacetime(right,T,K): c=[t%2 for t in range(T+K+4)] # centre dark at even t (phase 0) R=list(right)+[0]*(T+K+8); x1=[] for t in range(T+K+2): x1.append(R[0]); new=[0]*len(R) for i in range(len(R)): l=c[t] if i==0 else R[i-1]; r=R[i+1] if i+1=u(n) (monotone u=A1)":0} law={m:0 for m in range(2,8)}; tot=0 for _ in range(150): w=int(rng.integers(1,12)); right=list(rng.integers(0,2,size=w)) T=40; K=18; cols,x1=spacetime(right,T,K) A=lambda k,n: cols[k][2*n] for n in range(0,10): tot+=1 checks["A4(n)=0"]+= A(4,n)==0 checks["A3(n)=A1(n+1)"]+= A(3,n)==A(1,n+1) checks["A5(n)=[A1(n+1)==A1(n+2)]"]+= A(5,n)==int(A(1,n+1)==A(1,n+2)) checks["A7(n)=[A1(n+2)==A1(n+3)]"]+= A(7,n)==int(A(1,n+2)==A(1,n+3)) checks["A6(n)=notA5 and (A3 or A2)"]+= A(6,n)==int((1-A(5,n)) & (A(3,n)|A(2,n))) checks["u(n+1)>=u(n) (monotone u=A1)"]+= A(1,n+1)>=A(1,n) for m in range(2,8): law[m]+= A(2*m+1,n)==int(A(1,n+m-1)==A(1,n+m)) for k,v in checks.items(): print(f" {k:34s}: {v}/{tot}") print(" proposed law A_(2m+1)(n) = [A1(n+m-1)==A1(n+m)]:", {f"m={m} (depth {2*m+1})":f"{v}/{tot}" for m,v in law.items()})