code wiki / (root) / nx_research_investigate_gate.nx

nx_research_investigate_gate.nx source

↩ module page · 83 lines · 4811 B

1// nx_research_investigate_gate.nx -- liar-kill gate for S4 the INVESTIGATION LOOP controller (deterministic, $0). 2// Shows the ACTUAL iteration traces + honest termination for three real cases: CONVERGE (loop grounds a report 3// that started with an open gap), STALLED (gaps stop decreasing -> stop early, never infinite), BUDGET (gaps 4// decrease but hit the cap -> stop and report remaining gaps). license_tier: ORIGINAL 5import "nx_research_investigate.nx" 6import "nx_syscalls.nx" 7 8func st_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 9func st_putn(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)} let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1} sys_write(1,bb,k); return 0 } 10func st_trace(trace: *i64, n: i64) -> i64 { 11 st_puts("[" as *u8) 12 var i: i64 = 0 13 while i < n { if i > 0 { st_puts("," as *u8) } st_putn(trace[i]); i = i + 1 } 14 st_puts("]" as *u8) 15 return 0 16} 17func st_status(s: i64) -> i64 { 18 if s == 0 { st_puts("DONE-GROUNDED" as *u8) } else { if s == 1 { st_puts("DONE-BUDGET" as *u8) } else { if s == 2 { st_puts("DONE-STALLED" as *u8) } else { st_puts("CONTINUE" as *u8) } } } 19 return 0 20} 21 22func main() -> i64 { 23 var pass: i64 = 0 24 var total: i64 = 0 25 let trace: *i64 = sys_mmap(128) as *i64 26 let out: *i64 = sys_mmap(64) as *i64 27 let out2: *i64 = sys_mmap(64) as *i64 28 let seq: *i64 = sys_mmap(128) as *i64 29 30 // T1 CONVERGE -- the REAL S3 scenario: a 2-section report starts with 1 uncited claim (the fabricated-[3] 31 // Location claim); the loop investigates, grounds it, and stops. gaps per iteration: 1 -> 0. 32 total = total + 1 33 seq[0] = 1; seq[1] = 0 34 riv_run(seq, 2, 5, trace, out) 35 st_puts("T1 CONVERGE trace=" as *u8); st_trace(trace, out[0]); st_puts(" iters=" as *u8); st_putn(out[0]); st_puts(" final_gaps=" as *u8); st_putn(out[1]); st_puts(" status=" as *u8); st_status(out[2]); st_puts("\n" as *u8) 36 if out[0] == 2 { if out[1] == 0 { if out[2] == 0 { pass = pass + 1 } else { st_puts("T1 FAIL status\n" as *u8) } } else { st_puts("T1 FAIL gaps\n" as *u8) } } else { st_puts("T1 FAIL iters\n" as *u8) } 37 38 // T2 STALLED (liar-kill: no progress -> STOP EARLY, never loop forever). gaps: 2 -> 2 (stuck). 39 total = total + 1 40 seq[0] = 2; seq[1] = 2; seq[2] = 2; seq[3] = 2; seq[4] = 2 41 riv_run(seq, 5, 5, trace, out) 42 st_puts("T2 STALLED trace=" as *u8); st_trace(trace, out[0]); st_puts(" iters=" as *u8); st_putn(out[0]); st_puts(" final_gaps=" as *u8); st_putn(out[1]); st_puts(" status=" as *u8); st_status(out[2]); st_puts("\n" as *u8) 43 if out[2] == 2 { if out[0] == 2 { pass = pass + 1 } else { st_puts("T2 FAIL did-not-stop-early\n" as *u8) } } else { st_puts("T2 FAIL not-stalled\n" as *u8) } 44 45 // T3 BUDGET (decreasing but hits the cap -> stop, report remaining gaps honestly). gaps: 3 -> 2 -> 1, cap 3. 46 total = total + 1 47 seq[0] = 3; seq[1] = 2; seq[2] = 1 48 riv_run(seq, 3, 3, trace, out) 49 st_puts("T3 BUDGET trace=" as *u8); st_trace(trace, out[0]); st_puts(" iters=" as *u8); st_putn(out[0]); st_puts(" final_gaps=" as *u8); st_putn(out[1]); st_puts(" status=" as *u8); st_status(out[2]); st_puts("\n" as *u8) 50 if out[2] == 1 { if out[1] == 1 { pass = pass + 1 } else { st_puts("T3 FAIL remaining-gaps\n" as *u8) } } else { st_puts("T3 FAIL not-budget\n" as *u8) } 51 52 // T4 riv_next unit decisions 53 total = total + 1 54 var t4: i64 = 1 55 if riv_next(0, 0, 5, 9) != 0 { t4 = 0 } // grounded 56 if riv_next(2, 4, 5, 9) != 1 { t4 = 0 } // budget (iter+1>=max) 57 if riv_next(2, 1, 5, 2) != 2 { t4 = 0 } // stalled (gaps>=prev) 58 if riv_next(2, 1, 5, 9) != 3 { t4 = 0 } // continue 59 if t4 == 1 { pass = pass + 1 } else { st_puts("T4 FAIL riv_next\n" as *u8) } 60 61 // T5 riv_gaps aggregation 62 total = total + 1 63 var t5: i64 = 1 64 if riv_gaps(1, 0, 0) != 1 { t5 = 0 } 65 if riv_gaps(2, 1, 3) != 6 { t5 = 0 } 66 if t5 == 1 { pass = pass + 1 } else { st_puts("T5 FAIL riv_gaps\n" as *u8) } 67 68 // T6 determinism 69 total = total + 1 70 seq[0] = 3; seq[1] = 2; seq[2] = 1 71 riv_run(seq, 3, 3, trace, out) 72 riv_run(seq, 3, 3, trace, out2) 73 var t6: i64 = 1 74 if out[0] != out2[0] { t6 = 0 } 75 if out[1] != out2[1] { t6 = 0 } 76 if out[2] != out2[2] { t6 = 0 } 77 if t6 == 1 { pass = pass + 1 } else { st_puts("T6 FAIL not-deterministic\n" as *u8) } 78 79 st_puts("RESEARCH-INVESTIGATE " as *u8); st_putn(pass); st_puts("/" as *u8); st_putn(total); st_puts("\n" as *u8) 80 if pass == total { st_puts("RESEARCH-INVESTIGATE ALL-PASS\n" as *u8); sys_exit(0) } 81 sys_exit(1) 82 return 1 83}