code wiki / (root) / nx_dr_refute_cli.nx

nx_dr_refute_cli.nx source

↩ module page · 91 lines · 4688 B

1// nx_dr_refute_cli.nx -- callable MCP/API surface for the adversarial refutation stage (DR-2). 2// Aggregates N verifier votes on a claim under a correlation estimate and decides KILL vs 3// SURVIVE, encoding the decorrelation discount (correlated verifiers count less). 4// nx_dr_refute <rho_permil> <bar_permil> <votes_csv> 5// votes = comma-separated per-verifier verdicts: 0=refute 1=abstain 2=support 6// rho_permil = estimated correlation among verifiers (0=independent, 1000=one voice) 7// bar_permil = confidence bar in EFFECTIVE independent refutations (e.g. 2000 = 2 votes) 8// e.g. nx_dr_refute 0 2000 0,0,0,0,2 -> {"killed":1,"verdict":"KILLED",...} 9// nx_dr_refute 1000 2000 0,0,0,0,2 -> {"killed":0,"verdict":"SURVIVED",...} (correlated) 10// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0 11import "nx_dr_refute.nx" 12import "nx_syscalls.nx" 13const K_MAGIC_1024: i64 = 1024 14 15func rb_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 16func rb_q() -> i64 { let b: *u8 = sys_mmap(1); b[0] = 34 as u8; sys_write(1, b, 1); return 0 } 17func rb_key(name: *u8) -> i64 { rb_q(); rb_puts(name); rb_q(); rb_puts(":" as *u8); return 0 } 18func rb_num(v: i64) -> i64 { 19 let bb: *u8 = sys_mmap(28); var m: i64 = v; var neg: i64 = 0 20 if m < 0 { neg = 1; m = 0 - m } 21 let t: *u8 = sys_mmap(28); var k: i64 = 0 22 if m == 0 { t[0] = 48 as u8; k = 1 } 23 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 24 var o: i64 = 0 25 if neg == 1 { bb[o] = 45 as u8; o = o + 1 } 26 var i: i64 = 0 27 while i < k { bb[o] = t[k-1-i]; o = o + 1; i = i + 1 } 28 sys_write(1, bb, o); return 0 29} 30func rb_strlen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 31func rb_atoi(a: *u8) -> i64 { 32 var v: i64 = 0; var i: i64 = 0 33 while a[i] != (0 as u8) { 34 let ch: i64 = a[i] as i64 35 if ch >= 48 { if ch <= 57 { v = v * 10 + (ch - 48) } } 36 i = i + 1 37 } 38 return v 39} 40func rb_parse_csv(s: *u8, out: *i64, maxn: i64) -> i64 { 41 var cnt: i64 = 0; var cur: i64 = 0; var have: i64 = 0; var i: i64 = 0 42 let n: i64 = rb_strlen(s) 43 while i < n { 44 let c: i64 = s[i] as i64 45 if c >= 48 { if c <= 57 { cur = cur * 10 + (c - 48); have = 1 } } 46 if c == 44 { if cnt < maxn { out[cnt] = cur; cnt = cnt + 1 } cur = 0; have = 0 } 47 i = i + 1 48 } 49 if have == 1 { if cnt < maxn { out[cnt] = cur; cnt = cnt + 1 } } 50 return cnt 51} 52 53func main(argc: i64, argv: *i64) -> i64 { 54 if argc < 4 { rb_puts("{" as *u8); rb_key("error" as *u8); rb_q(); rb_puts("usage: nx_dr_refute <rho_permil> <bar_permil> <votes_csv 0=refute 1=abstain 2=support>" as *u8); rb_q(); rb_puts("}\n" as *u8); sys_exit(2); return 2 } 55 let rho: i64 = rb_atoi(argv[1] as *u8) 56 let bar: i64 = rb_atoi(argv[2] as *u8) 57 let raw: *i64 = sys_mmap(K_MAGIC_1024 * 8) as *i64 58 let n: i64 = rb_parse_csv(argv[3] as *u8, raw, K_MAGIC_1024) 59 if n < 1 { rb_puts("{" as *u8); rb_key("error" as *u8); rb_q(); rb_puts("need >=1 vote" as *u8); rb_q(); rb_puts("}\n" as *u8); sys_exit(1); return 1 } 60 61 // map 0/1/2 -> -1/0/+1 62 let sv: *i64 = sys_mmap(K_MAGIC_1024 * 8) as *i64 63 var i: i64 = 0 64 while i < n { sv[i] = raw[i] - 1; i = i + 1 } 65 let out: *i64 = sys_mmap(3 * 8) as *i64 66 rf_tally(sv, n, out) 67 let R: i64 = out[0] 68 let S: i64 = out[1] 69 let A: i64 = out[2] 70 let effn: i64 = rf_effective_n(n, rho) 71 let effref: i64 = rf_effective_refutes(R, n, rho) 72 let killed: i64 = rf_kill(R, S, n, rho, bar) 73 74 rb_puts("{" as *u8) 75 rb_key("tool" as *u8); rb_q(); rb_puts("nx_dr_refute" as *u8); rb_q(); rb_puts("," as *u8) 76 rb_key("m" as *u8); rb_num(n); rb_puts("," as *u8) 77 rb_key("refutes" as *u8); rb_num(R); rb_puts("," as *u8) 78 rb_key("supports" as *u8); rb_num(S); rb_puts("," as *u8) 79 rb_key("abstains" as *u8); rb_num(A); rb_puts("," as *u8) 80 rb_key("rho_permil" as *u8); rb_num(rho); rb_puts("," as *u8) 81 rb_key("effective_n_permil" as *u8); rb_num(effn); rb_puts("," as *u8) 82 rb_key("effective_refutes_permil" as *u8); rb_num(effref); rb_puts("," as *u8) 83 rb_key("bar_permil" as *u8); rb_num(bar); rb_puts("," as *u8) 84 rb_key("killed" as *u8); rb_num(killed); rb_puts("," as *u8) 85 rb_key("verdict" as *u8); rb_q() 86 if killed == 1 { rb_puts("KILLED" as *u8) } else { rb_puts("SURVIVED" as *u8) } 87 rb_q(); rb_puts("," as *u8) 88 rb_key("note" as *u8); rb_q(); rb_puts("Co-Scientist reflection kill-stage; decorrelated m_eff=m/(1+(m-1)rho); correlated refutes discounted; sovereign integer" as *u8); rb_q() 89 rb_puts("}\n" as *u8) 90 sys_exit(0); return 0 91}