code wiki / _hdl_build / nx_claim_extract_test.nx

nx_claim_extract_test.nx source

↩ module page · 71 lines · 4019 B

1// nx_claim_extract_test.nx -- ACCEPTANCE GATE for mechanized prose claim extraction. Exact KATs on 2// known prose, plus a real-corpus run proving it pulls many claims from actual research prose. 3import "nx_claim_extract.nx" 4import "nx_syscalls.nx" 5 6func xt_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 7func xt_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 } 8func xt_len(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 9 10func main() -> i64 { 11 var pass: i64 = 0 12 var total: i64 = 0 13 let out: *i64 = sys_mmap(64) as *i64 14 15 // T1: unit + digit detection 16 total = total + 1 17 let s1: *u8 = "a 10 um gate" as *u8 18 var t1: i64 = 1 19 if ce_has_digit(s1, 0, xt_len(s1)) != 1 { t1 = 0 } 20 if ce_has_unit(s1, 0, xt_len(s1)) != 1 { t1 = 0 } // "um" 21 if ce_is_fact_sentence(s1, 0, xt_len(s1)) != 1 { t1 = 0 } 22 let s1b: *u8 = "the sky is blue" as *u8 // no digit, no unit -> not a fact 23 if ce_is_fact_sentence(s1b, 0, xt_len(s1b)) != 0 { t1 = 0 } 24 let s1c: *u8 = "it has 100 things" as *u8 // digit but no unit -> not a fact 25 if ce_is_fact_sentence(s1c, 0, xt_len(s1c)) != 0 { t1 = 0 } 26 if t1 == 1 { pass = pass + 1 } else { xt_puts("T1 FAIL fact-detect\n" as *u8) } 27 28 // T2: first value extraction 29 total = total + 1 30 let s2: *u8 = "Z2 has 952 transistors" as *u8 31 if ce_first_value(s2, 0, xt_len(s2)) == 952 { pass = pass + 1 } else { xt_puts("T2 FAIL val=" as *u8); xt_putn(ce_first_value(s2,0,xt_len(s2))); xt_puts("\n" as *u8) } 32 33 // T3: EXTRACT over multi-sentence prose -- 4 sentences, 3 fact-bearing 34 // "The Z2 has 100 transistors" (digit+transistor=fact) 35 // "It uses a 10 um gate" (digit+um=fact) 36 // "The sky is blue" (no -> skip) 37 // "Mobility reached 20 cm2" (digit+cm=fact) 38 total = total + 1 39 let prose: *u8 = "The Z2 has 100 transistors. It uses a 10 um gate. The sky is blue. Mobility reached 20 cm2" as *u8 40 ce_extract(prose, xt_len(prose), out) 41 var t3: i64 = 1 42 if out[0] != 4 { t3 = 0 } // 4 sentences 43 if out[1] != 3 { t3 = 0 } // 3 claims extracted from PROSE (the gap-closer) 44 if out[2] != 100 { t3 = 0 } // first claim value 45 if t3 == 1 { pass = pass + 1 } else { xt_puts("T3 FAIL extract sent=" as *u8); xt_putn(out[0]); xt_puts(" facts=" as *u8); xt_putn(out[1]); xt_puts(" v=" as *u8); xt_putn(out[2]); xt_puts("\n" as *u8) } 46 47 // T4: REPRODUCIBLE -- same prose extracts identically twice (the property the LLM lacks) 48 total = total + 1 49 let out2: *i64 = sys_mmap(64) as *i64 50 ce_extract(prose, xt_len(prose), out2) 51 var t4: i64 = 1 52 if out2[1] != out[1] { t4 = 0 } 53 if out2[0] != out[0] { t4 = 0 } 54 if t4 == 1 { pass = pass + 1 } else { xt_puts("T4 FAIL not reproducible\n" as *u8) } 55 56 // ---- REAL-CORPUS run: extract claims from the actual research prose on disk ---- 57 let cap: i64 = 131072 58 let buf: *u8 = sys_mmap(cap) 59 let flen: i64 = ce_read_file("knowledge/library/electronics-fab-deep-research-2026-06-09.txt" as *u8, buf, cap) 60 ce_extract(buf, flen, out) 61 xt_puts("REAL-PROSE sentences=" as *u8); xt_putn(out[0]); xt_puts(" claims_extracted=" as *u8); xt_putn(out[1]); xt_puts("\n" as *u8) 62 63 // T5: the real corpus yields MANY mechanically-extracted claims (proves prose extraction at scale) 64 total = total + 1 65 if out[1] >= 10 { pass = pass + 1 } else { xt_puts("T5 FAIL real claims=" as *u8); xt_putn(out[1]); xt_puts("\n" as *u8) } 66 67 xt_puts("CLAIM-EXTRACT " as *u8); xt_putn(pass); xt_puts("/" as *u8); xt_putn(total); xt_puts("\n" as *u8) 68 if pass == total { xt_puts("CLAIM-EXTRACT ALL-PASS\n" as *u8); sys_exit(0) } 69 sys_exit(1) 70 return 1 71}