code wiki / _hdl_build / nx_isotope_gate.nx

nx_isotope_gate.nx source

↩ module page · 108 lines · 6298 B

1// nx_isotope_gate.nx -- chemistry external-reference loop, VERIFY + LIAR-KILL gate. Compares OUR periodic 2// table's exact isotope masses (nx_chem_periodic nx_chem_atomic_data_table_118: iso_mass_q4 = exact mass of 3// the most-abundant isotope * 10000) against the NIST Atomic Weights reference held in the SOVEREIGN seg_store 4// (key "iso:<Z>:<A>", populated by nx_isotope_ingest from the foundationed NIST data) -- NOT a TSV. 5// 6// For each element we look up NIST's Relative Atomic Mass for OUR most-abundant isotope (Z, iso_a_q0) and 7// assert iso_mass_q4 == NIST_q4 (exact integer; both are mass*10000 rounded). disagree>0 is a real finding 8// (our value drifted from NIST). missing = our isotope not in this NIST subset = honestly UNVERIFIED (reported, 9// never claimed verified). LIAR-KILL neg-control proves the lookup distinguishes known values + a missing key. 10// GREEN iff neg-control OK AND disagree==0. Writes knowledge/status/isotope_gate.log. license_tier: ORIGINAL 11import "nx_syscalls.nx" 12import "nx_seg_store.nx" 13import "nx_uxf_decode.nx" 14import "nx_chem_periodic.nx" 15 16const IG_STORE: *u8 = "knowledge/store/isotope-" 17const IG_LOG: *u8 = "knowledge/status/isotope_gate.log" 18 19func ig_w(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 } 20func ig_wn(fd: i64, v: i64) -> i64 { let b: *u8=sys_mmap(16); var m: i64=v; if m<0{m=0-m;sys_write(fd,"-" as *u8,1)} let t: *u8=sys_mmap(16); 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{b[i]=t[k-1-i];i=i+1}; sys_write(fd,b,k); return 0 } 21func ig_streq(a: *u8, b: *u8) -> i64 { var i: i64=0; while a[i]!=(0 as u8){ if a[i]!=b[i]{return 0} i=i+1 } if b[i]!=(0 as u8){return 0} return 1 } 22func ig_itoa(v: i64, dst: *u8) -> i64 { var m: i64=v; let t: *u8=sys_mmap(24); 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{dst[i]=t[k-1-i];i=i+1} dst[k]=0 as u8; return k } 23func ig_atoi(s: *u8) -> i64 { var v: i64=0; var i: i64=0; while s[i]!=(0 as u8){ if s[i]>=(48 as u8){ if s[i]<=(57 as u8){ v=v*10+(s[i]-48) } } i=i+1 } return v } 24 25// NIST Q4 mass for isotope (z,a) from the sovereign store; -1 if absent. 26func ig_ref(z: i64, a: i64) -> i64 { 27 let kb: *u8 = sys_mmap(64); var kn: i64 = 0 28 let kp: *u8 = "iso:" as *u8; var ki: i64 = 0 29 while kp[ki]!=(0 as u8){ kb[kn]=kp[ki]; kn=kn+1; ki=ki+1 } 30 kn = kn + ig_itoa(z, ((kb as i64)+kn) as *u8) 31 kb[kn]=58 as u8; kn=kn+1 32 kn = kn + ig_itoa(a, ((kb as i64)+kn) as *u8) 33 let gp: *i64 = sys_mmap(8) as *i64; let gl: *i64 = sys_mmap(8) as *i64 34 if ss_get(IG_STORE, kb, gp, gl) != 1 { return 0 - 1 } 35 let dk: *i64 = sys_mmap(64) as *i64; let dv: *i64 = sys_mmap(64) as *i64 36 let nf: i64 = canon_decode(gp[0] as *u8, gl[0], dk, dv, 8) 37 if nf < 0 { return 0 - 1 } 38 var f: i64 = 0 39 while f < nf { if ig_streq(dk[f] as *u8, "mass_q4" as *u8)==1 { return ig_atoi(dv[f] as *u8) } f=f+1 } 40 return 0 - 1 41} 42 43func main() -> i64 { 44 let arr: *AtomicData = nx_chem_atomic_data_table_118() 45 46 // LIAR-KILL neg-control: known references resolve + a missing key is absent. 47 var nc: i64 = 1 48 if ig_ref(6, 12) != 120000 { nc = 0 } // C-12 exactly 12 49 if ig_ref(8, 16) != 159949 { nc = 0 } // O-16 50 if ig_ref(999, 999) != (0 - 1) { nc = 0 } // absent -> not found 51 52 var agree: i64 = 0; var disagree: i64 = 0; var missing: i64 = 0 53 let rep: *u8 = sys_mmap(65536); var rw: i64 = 0 54 55 var idx: i64 = 0 56 while idx < 118 { 57 let d: *AtomicData = ((arr as i64) + idx * NX_ATOMIC_DATA_BYTES) as *AtomicData 58 let z: i64 = d.z 59 let a: i64 = d.iso_a_q0 60 let ourq4: i64 = d.iso_mass_q4 61 let nistq4: i64 = ig_ref(z, a) 62 if nistq4 == (0 - 1) { 63 missing = missing + 1 64 let m1: *u8=" MISSING Z="; var b: i64=0; while m1[b]!=(0 as u8){rep[rw]=m1[b];rw=rw+1;b=b+1} 65 let zb: *u8=sys_mmap(24); ig_itoa(z, zb); b=0; while zb[b]!=(0 as u8){rep[rw]=zb[b];rw=rw+1;b=b+1} 66 let m2: *u8=" A="; b=0; while m2[b]!=(0 as u8){rep[rw]=m2[b];rw=rw+1;b=b+1} 67 let ab: *u8=sys_mmap(24); ig_itoa(a, ab); b=0; while ab[b]!=(0 as u8){rep[rw]=ab[b];rw=rw+1;b=b+1} 68 rep[rw]=10 as u8; rw=rw+1 69 } else { 70 if ourq4 == nistq4 { agree = agree + 1 } 71 else { 72 disagree = disagree + 1 73 let m1: *u8=" DISAGREE Z="; var b: i64=0; while m1[b]!=(0 as u8){rep[rw]=m1[b];rw=rw+1;b=b+1} 74 let zb: *u8=sys_mmap(24); ig_itoa(z, zb); b=0; while zb[b]!=(0 as u8){rep[rw]=zb[b];rw=rw+1;b=b+1} 75 let m2: *u8=" A="; b=0; while m2[b]!=(0 as u8){rep[rw]=m2[b];rw=rw+1;b=b+1} 76 let ab: *u8=sys_mmap(24); ig_itoa(a, ab); b=0; while ab[b]!=(0 as u8){rep[rw]=ab[b];rw=rw+1;b=b+1} 77 let m3: *u8=" ours="; b=0; while m3[b]!=(0 as u8){rep[rw]=m3[b];rw=rw+1;b=b+1} 78 let ob: *u8=sys_mmap(24); ig_itoa(ourq4, ob); b=0; while ob[b]!=(0 as u8){rep[rw]=ob[b];rw=rw+1;b=b+1} 79 let m4: *u8=" nist="; b=0; while m4[b]!=(0 as u8){rep[rw]=m4[b];rw=rw+1;b=b+1} 80 let nb: *u8=sys_mmap(24); ig_itoa(nistq4, nb); b=0; while nb[b]!=(0 as u8){rep[rw]=nb[b];rw=rw+1;b=b+1} 81 rep[rw]=10 as u8; rw=rw+1 82 } 83 } 84 idx = idx + 1 85 } 86 87 var ok: i64 = 0 88 if nc==1 { if disagree==0 { ok = 1 } } 89 90 var p2: i64 = 0 91 while p2 < 2 { 92 var fd: i64 = 1 93 if p2==1 { fd = sys_openat_append(IG_LOG, 0x1a4) } 94 if fd >= 0 { 95 ig_w(fd, "ISOTOPE-GATE elements=118 agree=" as *u8); ig_wn(fd, agree) 96 ig_w(fd, " disagree=" as *u8); ig_wn(fd, disagree) 97 ig_w(fd, " missing(unverified)=" as *u8); ig_wn(fd, missing) 98 ig_w(fd, " negctrl=" as *u8); if nc==1 { ig_w(fd, "OK" as *u8) } else { ig_w(fd, "FAIL" as *u8) } 99 ig_w(fd, " ref=NIST-AtomicWeights(sovereign-seg_store) model=iso_mass_q4-exact" as *u8) 100 if ok==1 { ig_w(fd, " verdict=GREEN\n" as *u8) } else { ig_w(fd, " verdict=RED\n" as *u8) } 101 sys_write(fd, rep, rw) 102 if p2==1 { sys_close(fd) } 103 } 104 p2 = p2 + 1 105 } 106 if ok==1 { sys_exit(0); return 0 } 107 sys_exit(1); return 1 108}