code wiki / (root) / nx_arousal_fit_gate.nx

nx_arousal_fit_gate.nx source

↩ module page · 178 lines · 12325 B

1// nx_arousal_fit_gate.nx -- liar-killed GATE for the tau fitter. 2// The load-bearing tooth is NON-VACUITY: the fitter must recover DIFFERENT tau from DIFFERENT data. 3// A fitter that returns a constant would still show residual=0 on its own training point, so 4// "residual=0" alone proves nothing -- T4 is the tooth that actually convicts. 5// 6// Synthetic truth generated by the engine itself (nx_arousal residual <tau> ... 0 0 prints m1/m2): 7// tau= 90000 -> obs 670/987 tau=185000 -> obs 416/883 8// tau=210000 -> obs 378/850 tau=300000 -> obs 282/734 9// usage: nx_arousal_fit_gate [elf] Exit 0 on 12/12. 10// license_tier: ORIGINAL expect_exit: 0 11import "nx_syscalls.nx" 12 13const G_OUTCAP: i64 = 16384 14// Tooth total is DERIVED (g_bool counts every attempt) -- a hand-maintained total silently drifts 15// from the real tooth count on every edit. G_MIN_TEETH is a FLOOR so deleting a tooth still trips RED. 16const G_MIN_TEETH: i64 = 30 17 18func g_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 19func g_putn(v: i64) -> i64 { 20 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 21 var m: i64 = v 22 let d: *u8 = sys_mmap(24); var k: i64 = 0 23 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 24 let o: *u8 = sys_mmap(24); var w: i64 = 0 25 while w < k { o[w] = d[k-1-w]; w = w + 1 } 26 sys_write(1, o, k) 27 sys_munmap(d, 24); sys_munmap(o, 24) 28 return 0 29} 30func g_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 31// passp[0] = passes, passp[1] = attempts. Counting attempts here is what makes the total derived. 32func g_bool(name: *u8, got: i64, want: i64, passp: *i64) -> i64 { 33 passp[1] = passp[1] + 1 34 g_puts("T " as *u8); g_puts(name); g_puts(" got=" as *u8); g_putn(got) 35 if got == want { g_puts(" PASS\n" as *u8); passp[0] = passp[0] + 1 } else { g_puts(" FAIL\n" as *u8) } 36 return 0 37} 38func g_has(hay: *u8, hn: i64, needle: *u8) -> i64 { 39 let nl: i64 = g_slen(needle) 40 if nl == 0 { return 0 } 41 var i: i64 = 0 42 while i + nl <= hn { var k: i64 = 0; var ok: i64 = 1; while k < nl { if hay[i+k] != needle[k] { ok = 0; k = nl } k = k + 1 } if ok == 1 { return 1 } i = i + 1 } 43 return 0 44} 45// mode 420 = 0o644. sys_openat_wr arg2 is the FILE MODE, not flags -- passing a flag word here 46// creates a non-owner-writable file whose FIRST open succeeds and every later one silently EACCESs. 47func g_write(path: *u8, s: *u8) -> i64 { let fd: i64 = sys_openat_wr(path, 420); if fd < 0 { return 0 - 1 } sys_write(fd, s, g_slen(s)); sys_close(fd); return 0 } 48func g_run(elf: *u8, a1: *u8, a2: *u8, a3: *u8, a4: *u8, a5: *u8, a6: *u8, a7: *u8, a8: *u8, out: *u8, cap: i64) -> i64 { 49 let pb: *i64 = sys_mmap(16) as *i64 50 sys_pipe2(pb, 0) 51 let rfd: i64 = pb[0] & 0xFFFFFFFF 52 let wfd: i64 = (pb[0] >> 32) & 0xFFFFFFFF 53 let pid: i64 = sys_fork() 54 if pid == 0 { 55 sys_dup3(wfd, 1, 0) 56 sys_close(rfd); sys_close(wfd) 57 let av: *i64 = sys_mmap(112) as *i64 58 av[0] = elf as i64 59 var ac: i64 = 1 60 if a1 as i64 != 0 { av[ac] = a1 as i64; ac = ac + 1 } 61 if a2 as i64 != 0 { av[ac] = a2 as i64; ac = ac + 1 } 62 if a3 as i64 != 0 { av[ac] = a3 as i64; ac = ac + 1 } 63 if a4 as i64 != 0 { av[ac] = a4 as i64; ac = ac + 1 } 64 if a5 as i64 != 0 { av[ac] = a5 as i64; ac = ac + 1 } 65 if a6 as i64 != 0 { av[ac] = a6 as i64; ac = ac + 1 } 66 if a7 as i64 != 0 { av[ac] = a7 as i64; ac = ac + 1 } 67 if a8 as i64 != 0 { av[ac] = a8 as i64; ac = ac + 1 } 68 av[ac] = 0 69 sys_execve(elf, av, 0 as *i64) 70 sys_exit(127) 71 } 72 sys_close(wfd) 73 var tot: i64 = 0 74 var n: i64 = sys_read(rfd, out, cap - 1) 75 while n > 0 { tot = tot + n; if tot >= cap - 1 { n = 0 } else { n = sys_read(rfd, (out as i64 + tot) as *u8, cap - 1 - tot) } } 76 sys_close(rfd) 77 let st: *i64 = sys_mmap(16) as *i64 78 sys_wait4(pid, st, 0) 79 out[tot] = 0 as u8 80 return tot 81} 82 83func main(argc: i64, argv: *i64) -> i64 { 84 var elf: *u8 = "_build/nx_arousal_fit.sov.elf" as *u8 85 if argc >= 2 { elf = argv[1] as *u8 } 86 var eelf: *u8 = "_build/nx_arousal.sov.elf" as *u8 87 if argc >= 3 { eelf = argv[2] as *u8 } 88 let pass: *i64 = sys_mmap(16) as *i64 89 pass[0] = 0 90 pass[1] = 0 91 let out: *u8 = sys_mmap(G_OUTCAP) 92 var n: i64 = 0 93 94 // T1 recover the male slow-vascular tau (truth 185000) from its own synthetic observations 95 n = g_run(elf, "tau" as *u8, "1000" as *u8, "100000" as *u8, "416" as *u8, "400000" as *u8, "883" as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 96 g_bool("recovers-male-tau-185007" as *u8, g_has(out, n, "best_tau=185007" as *u8), 1, pass) 97 g_bool("residual-driven-to-zero" as *u8, g_has(out, n, "residual=0 " as *u8), 1, pass) 98 g_bool("reports-improved-over-seed" as *u8, g_has(out, n, "improved=1" as *u8), 1, pass) 99 // the seed baseline must be VISIBLE -- a fitter that hides its starting point can't be audited 100 g_bool("seed-baseline-visible-572" as *u8, g_has(out, n, "seed_residual=572" as *u8), 1, pass) 101 102 // T2/T3 THE NON-VACUITY TEETH: different data must yield different tau. 103 n = g_run(elf, "tau" as *u8, "1000" as *u8, "100000" as *u8, "670" as *u8, "400000" as *u8, "987" as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 104 g_bool("recovers-fast-tau-89879" as *u8, g_has(out, n, "best_tau=89879" as *u8), 1, pass) 105 // NEG CONTROL: a fitter returning a constant would still emit 185007 here. It must NOT. 106 g_bool("NEG-fit-is-not-a-constant" as *u8, g_has(out, n, "best_tau=185007" as *u8), 0, pass) 107 n = g_run(elf, "tau" as *u8, "1000" as *u8, "100000" as *u8, "282" as *u8, "400000" as *u8, "734" as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 108 g_bool("recovers-slow-tau-299632" as *u8, g_has(out, n, "best_tau=299632" as *u8), 1, pass) 109 // T4 the female slow-vascular tau (truth 210000) recovers to its own value, not the male one 110 n = g_run(elf, "tau" as *u8, "1000" as *u8, "100000" as *u8, "378" as *u8, "400000" as *u8, "850" as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 111 g_bool("recovers-female-tau-209394" as *u8, g_has(out, n, "best_tau=209394" as *u8), 1, pass) 112 113 // T5 refusals: a corrupt or degenerate input must be REFUSED, never fitted. 114 n = g_run(elf, "tau" as *u8, "1000" as *u8, "100000" as *u8, "5000" as *u8, "400000" as *u8, "883" as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 115 g_bool("refuses-obs-out-of-permil-range" as *u8, g_has(out, n, "REFUSED reason=obs_out_of_range" as *u8), 1, pass) 116 n = g_run(elf, "tau" as *u8, "1000" as *u8, "100000" as *u8, "416" as *u8, "400000" as *u8, "883" as *u8, "500000" as *u8, "1000" as *u8, out, G_OUTCAP) 117 g_bool("refuses-empty-bracket" as *u8, g_has(out, n, "REFUSED reason=empty_bracket" as *u8), 1, pass) 118 n = g_run(elf, "tau" as *u8, "0" as *u8, "100000" as *u8, "416" as *u8, "400000" as *u8, "883" as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 119 g_bool("refuses-nonpositive-drive" as *u8, g_has(out, n, "REFUSED reason=nonpositive_drive" as *u8), 1, pass) 120 n = g_run(elf, "tau" as *u8, "5000" as *u8, "100000" as *u8, "416" as *u8, "400000" as *u8, "883" as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 121 g_bool("refuses-drive-over-permil" as *u8, g_has(out, n, "REFUSED reason=drive_over_permil" as *u8), 1, pass) 122 123 // ---- SERIES (dense-trajectory joint tau+drive fit) ----------------------------------------- 124 // The gate GENERATES its own ground truth via the engine's gen verb rather than trusting 125 // hand-copied constants, so generator and fitter are proven consistent in one act. 126 n = g_run(eelf, "gen" as *u8, "185000" as *u8, "800" as *u8, "30000" as *u8, "20" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 127 g_bool("gen-emits-a-trajectory" as *u8, g_has(out, n, "30000 119" as *u8), 1, pass) 128 g_write("_scratch/gate_ser_a.txt" as *u8, out) 129 n = g_run(elf, "series" as *u8, "_scratch/gate_ser_a.txt" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 130 g_bool("series-joint-recovers-tau-185012" as *u8, g_has(out, n, "best_tau=185012" as *u8), 1, pass) 131 g_bool("series-joint-recovers-drive-800" as *u8, g_has(out, n, "best_drive=800" as *u8), 1, pass) 132 g_bool("series-residual-zero" as *u8, g_has(out, n, "residual=0 " as *u8), 1, pass) 133 134 // NON-VACUITY: a DIFFERENT trajectory must yield DIFFERENT parameters (the seq1399 law). 135 n = g_run(eelf, "gen" as *u8, "90000" as *u8, "450" as *u8, "20000" as *u8, "20" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 136 g_write("_scratch/gate_ser_b.txt" as *u8, out) 137 n = g_run(elf, "series" as *u8, "_scratch/gate_ser_b.txt" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 138 g_bool("series-recovers-distinct-tau-90005" as *u8, g_has(out, n, "best_tau=90005" as *u8), 1, pass) 139 g_bool("series-recovers-distinct-drive-450" as *u8, g_has(out, n, "best_drive=450" as *u8), 1, pass) 140 g_bool("NEG-series-fit-is-not-a-constant" as *u8, g_has(out, n, "best_tau=185012" as *u8), 0, pass) 141 142 // malformed input is REFUSED, never fitted 143 g_write("_scratch/gate_unsorted.txt" as *u8, "300000 500\n100000 200\n400000 700\n" as *u8) 144 n = g_run(elf, "series" as *u8, "_scratch/gate_unsorted.txt" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 145 g_bool("series-refuses-non-ascending" as *u8, g_has(out, n, "REFUSED reason=malformed_series" as *u8), 1, pass) 146 n = g_run(elf, "series" as *u8, "_scratch/gate_absent.txt" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 147 g_bool("series-refuses-unreadable-path" as *u8, g_has(out, n, "REFUSED reason=series_unreadable" as *u8), 1, pass) 148 149 // ---- NOISE ROBUSTNESS: the pass that stands between this fitter and real captures ---------- 150 // Real thermography carries sensor noise, motion artifact and ambient drift. A fitter that 151 // still reports residual=0 and a point estimate on noisy input is reporting false precision. 152 n = g_run(eelf, "gen" as *u8, "185000" as *u8, "800" as *u8, "30000" as *u8, "20" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 153 // noiseless output must be BYTE-IDENTICAL to before the noise args existed (scope-slot check) 154 g_bool("gen-noiseless-output-unchanged" as *u8, g_has(out, n, "30000 119" as *u8), 1, pass) 155 n = g_run(eelf, "gen" as *u8, "185000" as *u8, "800" as *u8, "30000" as *u8, "20" as *u8, "40" as *u8, "777" as *u8, 0 as *u8, out, G_OUTCAP) 156 // same seed must reproduce exactly, or a noise tooth is not a tooth 157 g_bool("gen-noise-deterministic-seed777" as *u8, g_has(out, n, "30000 97" as *u8), 1, pass) 158 g_bool("NEG-noisy-is-not-the-clean-series" as *u8, g_has(out, n, "30000 119" as *u8), 0, pass) 159 g_write("_scratch/gate_noisy.txt" as *u8, out) 160 161 n = g_run(elf, "series" as *u8, "_scratch/gate_ser_a.txt" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 162 g_bool("clean-bracket-is-tight-925" as *u8, g_has(out, n, "ci_width=925" as *u8), 1, pass) 163 n = g_run(elf, "series" as *u8, "_scratch/gate_noisy.txt" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, out, G_OUTCAP) 164 // residual CANNOT reach zero against noisy data -- if it does, the objective is ignoring the data 165 g_bool("noisy-residual-is-nonzero-383" as *u8, g_has(out, n, "residual=383" as *u8), 1, pass) 166 g_bool("noisy-bracket-widens-to-15136" as *u8, g_has(out, n, "ci_width=15136" as *u8), 1, pass) 167 g_bool("NEG-noisy-bracket-is-not-tight" as *u8, g_has(out, n, "ci_width=925" as *u8), 0, pass) 168 // THE HONESTY PROPERTY: the point estimate drifts to 189277 (2.3% off the true 185000), but the 169 // reported bracket must still CONTAIN 185000 -- 182655 below it, 197791 above it. 170 g_bool("noisy-bracket-lo-below-truth" as *u8, g_has(out, n, "tau_lo=182655" as *u8), 1, pass) 171 g_bool("noisy-bracket-hi-above-truth" as *u8, g_has(out, n, "tau_hi=197791" as *u8), 1, pass) 172 173 g_puts("AROUSAL-FIT-GATE pass=" as *u8); g_putn(pass[0]); g_puts("/" as *u8); g_putn(pass[1]); g_puts(" verdict=" as *u8) 174 if pass[1] < G_MIN_TEETH { g_puts("RED reason=teeth_deleted\n" as *u8); return 1 } 175 if pass[0] == pass[1] { g_puts("GREEN\n" as *u8); return 0 } 176 g_puts("RED\n" as *u8) 177 return 1 178}