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}