code wiki / _hdl_build / _rational_gate.nx

_rational_gate.nx source

↩ module page · 76 lines · 3572 B

1// _rational_gate.nx -- self-validating gate for EXACT rational arithmetic (ME4). 2// Proves results f64 CANNOT get exactly (free algebraic oracle): 3// (1) 1/3 + 1/3 + 1/3 == 1 (f64: 0.999...) 4// (2) sum_{k=1}^1000 1/(k(k+1)) == 1000/1001 (telescoping identity) 5// (3) 1/10 + 2/10 == 3/10 EXACTLY (while f64 0.1+0.2 != 0.3 -- shown) 6// (4) (1/7) * 7 == 1 7// GREEN iff all exact identities hold AND the f64 0.1+0.2!=0.3 contrast is real (so the 8// exactness is demonstrably non-trivial). Durable: RATIONAL-GATE -> math_engine.log. 9// license_tier: ORIGINAL 10import "nx_syscalls.nx" 11import "nx_rational.nx" 12import "nx_f64.nx" 13 14func rg_p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 15func rg_f(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 } 16func rg_n(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m; sys_write(fd,"-" 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(fd,bb,k); return 0 } 17 18func main() -> i64 { 19 rg_p("=== RATIONAL GATE: exact rational arithmetic (results f64 cannot reach) ===\n" as *u8) 20 var bad: i64 = 0 21 22 // (1) 1/3 + 1/3 + 1/3 == 1 23 let third: *i64 = rat_new(); rat_set(third, 1, 3) 24 let s: *i64 = rat_new(); rat_set(s, 0, 1) 25 rat_add(s, s, third); rat_add(s, s, third); rat_add(s, s, third) 26 if s[0] != 1 { bad = bad + 1 } 27 if s[1] != 1 { bad = bad + 1 } 28 29 // (2) telescoping sum_{k=1}^1000 1/(k(k+1)) == 1000/1001 30 let sum: *i64 = rat_new(); rat_set(sum, 0, 1) 31 let term: *i64 = rat_new() 32 var k: i64 = 1 33 while k <= 1000 { 34 rat_set(term, 1, k * (k + 1)) 35 rat_add(sum, sum, term) 36 k = k + 1 37 } 38 if sum[0] != 1000 { bad = bad + 1 } 39 if sum[1] != 1001 { bad = bad + 1 } 40 41 // (3) 1/10 + 2/10 == 3/10 exactly 42 let x: *i64 = rat_new(); rat_set(x, 1, 10) 43 let y: *i64 = rat_new(); rat_set(y, 2, 10) 44 let z: *i64 = rat_new(); rat_add(z, x, y) 45 if z[0] != 3 { bad = bad + 1 } 46 if z[1] != 10 { bad = bad + 1 } 47 // f64 contrast: 0.1 + 0.2 != 0.3 48 let fsum: i64 = nx_f64_add(0x3FB999999999999A, 0x3FC999999999999A) 49 var f64_wrong: i64 = 0 50 if fsum != 0x3FD3333333333333 { f64_wrong = 1 } 51 52 // (4) (1/7) * 7 == 1 53 let h: *i64 = rat_new(); rat_set(h, 1, 7) 54 let sev: *i64 = rat_new(); rat_set(sev, 7, 1) 55 let p: *i64 = rat_new(); rat_mul(p, h, sev) 56 if p[0] != 1 { bad = bad + 1 } 57 if p[1] != 1 { bad = bad + 1 } 58 59 var ok: i64 = 0 60 if bad == 0 { if f64_wrong == 1 { ok = 1 } } 61 let lfd: i64 = sys_openat_append("knowledge/status/math_engine.log" as *u8, 0x1a4) 62 if lfd >= 0 { 63 rg_f(lfd, "RATIONAL-GATE epoch=" as *u8); rg_n(lfd, sys_now_realtime_sec()) 64 rg_f(lfd, " exact_field_mismatches=" as *u8); rg_n(lfd, bad) 65 rg_f(lfd, " f64_01p02_ne_03=" as *u8); rg_n(lfd, f64_wrong) 66 rg_f(lfd, " tests=4 me4=exact-rational wolfram-pillar" as *u8) 67 if ok == 1 { rg_f(lfd, " verdict=GREEN\n" as *u8) } else { rg_f(lfd, " verdict=RED\n" as *u8) } 68 sys_close(lfd) 69 } 70 rg_p(" exact_field_mismatches=" as *u8); rg_n(1, bad) 71 rg_p(" f64_0.1+0.2!=0.3=" as *u8); rg_n(1, f64_wrong) 72 if ok == 1 { rg_p(" RATIONAL-GATE: GREEN (ME4 exact rational: 1/3*3=1, telescope=1000/1001, 1/10+2/10=3/10 -- f64 cannot)\n" as *u8); sys_exit(0); return 0 } 73 rg_p(" RATIONAL-GATE: RED\n" as *u8) 74 sys_exit(1) 75 return 1 76}