code wiki / _hdl_build / nx_phys_units.nx

nx_phys_units.nx source

↩ module page · 159 lines · 6978 B

1// nx_phys_units.nx -- the SOVEREIGN INTEGER-EXACT dimensional-analysis engine (science-exceed arc, 2// rung PHYS-UNITS). A physical quantity's DIMENSION is the vector of 7 INTEGER SI-base exponents 3// [L,M,T,I,TH,N,J]. Dimensional algebra is therefore PURE INTEGER -- multiply = ADD exponent vectors, 4// divide = SUBTRACT, power = SCALE, "compatible for +/compare" = EXACT vector equality. No float 5// anywhere -> exact, deterministic, reproducible, attestable. 6// 7// EXCEED THESIS vs Mathematica Quantity/UnitConvert (the top-down incumbent): Mathematica is float- 8// magnitude + proprietary + cloud-tethered; Nishi tracks dimensions as exact integer vectors, sovereign 9// + offline + bit-attestable. We do NOT out-breadth Wolfram -- we win on EXACTNESS + SOVEREIGNTY. 10// 11// Data-driven (rule-11): the unit->dimension map is knowledge/registry/sci_units.tsv (no magic numbers 12// in code). BAKED GATE proves the algebra on real physics identities (F=ma, E=F*d, P=E/t exact) + 13// a NEGATIVE control (force != energy -> rejected) before emitting verdict=GREEN. 14// 15// module: nishi-core.science.phys_units 16// depends: nishi-core.sys.syscalls 17// capability: INTEGER_EXACT_DIMENSIONAL_ANALYSIS 18// license_tier: ORIGINAL 19import "nx_syscalls.nx" 20const PU_MAGIC_65536: i64 = 65536 21 22const PU_REF: *u8 = "knowledge/registry/sci_units.tsv" 23const PU_LOG: *u8 = "knowledge/status/phys_units.log" 24 25func pu_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 } 26func pu_wn(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;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 } 27 28func pu_read(path: *u8, buf: *u8, cap: i64) -> i64 { 29 let fd: i64 = sys_openat_rd(path) 30 if fd < 0 { return 0 } 31 var n: i64 = 0 32 var r: i64 = sys_read(fd, buf, cap - 1) 33 while r > 0 { n = n + r; if n >= cap - 1 { r = 0 } else { r = sys_read(fd, buf + n, cap - 1 - n) } } 34 sys_close(fd) 35 return n 36} 37 38// copy tab-field f of line [ls,le) into dst; returns length. 39func pu_field(buf: *u8, ls: i64, le: i64, f: i64, dst: *u8, cap: i64) -> i64 { 40 var col: i64 = 0 41 var p: i64 = ls 42 var k: i64 = 0 43 while p < le { 44 if buf[p] == (9 as u8) { if col == f { dst[k] = 0 as u8; return k } col = col + 1; if col == f { k = 0 } } 45 else { if col == f { if k < cap - 1 { dst[k] = buf[p]; k = k + 1 } } } 46 p = p + 1 47 } 48 dst[k] = 0 as u8 49 return k 50} 51 52// signed decimal string -> i64. 53func pu_atoi(s: *u8, len: i64) -> i64 { 54 var neg: i64 = 0; var i: i64 = 0; var v: i64 = 0 55 if len > 0 { if s[0] == (45 as u8) { neg = 1; i = 1 } } 56 while i < len { if s[i] >= (48 as u8) { if s[i] <= (57 as u8) { v = v * 10 + (s[i] - 48) } } i = i + 1 } 57 if neg == 1 { return 0 - v } 58 return v 59} 60 61func pu_streq(a: *u8, b: *u8) -> i64 { 62 var i: i64 = 0 63 while a[i] != (0 as u8) { if a[i] != b[i] { return 0 } i = i + 1 } 64 if b[i] != (0 as u8) { return 0 } 65 return 1 66} 67 68// integer dimensional algebra over 7-exponent vectors. 69func pu_mul(out: *i64, a: *i64, b: *i64) -> i64 { var k: i64=0; while k<7 { out[k]=a[k]+b[k]; k=k+1 } return 0 } 70func pu_div(out: *i64, a: *i64, b: *i64) -> i64 { var k: i64=0; while k<7 { out[k]=a[k]-b[k]; k=k+1 } return 0 } 71func pu_eq(a: *i64, b: *i64) -> i64 { var k: i64=0; while k<7 { if a[k]!=b[k] { return 0 } k=k+1 } return 1 } 72 73// look up unit <name> in registry buf -> fill dim[0..7] with its 7 SI exponents. 1 found / 0 not. 74func pu_lookup(rbuf: *u8, rn: i64, name: *u8, dim: *i64) -> i64 { 75 let fld: *u8 = sys_mmap(64) 76 let f2: *u8 = sys_mmap(32) 77 var ls: i64 = 0 78 var i: i64 = 0 79 while i <= rn { 80 var eol: i64 = 0 81 if i == rn { eol = 1 } else { if rbuf[i] == (10 as u8) { eol = 1 } } 82 if eol == 1 { 83 if i > ls { if rbuf[ls] != (35 as u8) { 84 pu_field(rbuf, ls, i, 0, fld, 64) 85 if pu_streq(fld, name) == 1 { 86 var c: i64 = 0 87 while c < 7 { 88 let fl: i64 = pu_field(rbuf, ls, i, 1 + c, f2, 32) 89 dim[c] = pu_atoi(f2, fl) 90 c = c + 1 91 } 92 return 1 93 } 94 } } 95 ls = i + 1 96 } 97 i = i + 1 98 } 99 return 0 100} 101 102func main() -> i64 { 103 let rbuf: *u8 = sys_mmap(PU_MAGIC_65536) 104 let rn: i64 = pu_read(PU_REF, rbuf, PU_MAGIC_65536) 105 if rn <= 0 { pu_w(1, "PHYSUNITS-GATE verdict=RED reason=no-ref\n" as *u8); sys_exit(11); return 11 } 106 107 let N: *i64 = sys_mmap(56) as *i64 108 let kg: *i64 = sys_mmap(56) as *i64 109 let ac: *i64 = sys_mmap(56) as *i64 110 let J: *i64 = sys_mmap(56) as *i64 111 let m: *i64 = sys_mmap(56) as *i64 112 let s: *i64 = sys_mmap(56) as *i64 113 let W: *i64 = sys_mmap(56) as *i64 114 let tmp: *i64 = sys_mmap(56) as *i64 115 116 var found: i64 = 1 117 if pu_lookup(rbuf, rn, "N" as *u8, N) != 1 { found = 0 } 118 if pu_lookup(rbuf, rn, "kg" as *u8, kg) != 1 { found = 0 } 119 if pu_lookup(rbuf, rn, "accel" as *u8, ac) != 1 { found = 0 } 120 if pu_lookup(rbuf, rn, "J" as *u8, J) != 1 { found = 0 } 121 if pu_lookup(rbuf, rn, "m" as *u8, m) != 1 { found = 0 } 122 if pu_lookup(rbuf, rn, "s" as *u8, s) != 1 { found = 0 } 123 if pu_lookup(rbuf, rn, "W" as *u8, W) != 1 { found = 0 } 124 if found != 1 { pu_w(1, "PHYSUNITS-GATE verdict=RED reason=lookup-miss\n" as *u8); sys_exit(12); return 12 } 125 126 // POSITIVE checks (exact integer dimensional identities): 127 // c1: F = m*a -> [N] == [kg]*[accel] 128 pu_mul(tmp, kg, ac); let c1: i64 = pu_eq(tmp, N) 129 // c2: E = F*d -> [J] == [N]*[m] 130 pu_mul(tmp, N, m); let c2: i64 = pu_eq(tmp, J) 131 // c3: P = E/t -> [W] == [J]/[s] 132 pu_div(tmp, J, s); let c3: i64 = pu_eq(tmp, W) 133 // NEGATIVE control: force and energy are DISTINCT dims -> must NOT be equal (no false-compatible). 134 let nc: i64 = pu_eq(N, J) // must be 0 135 136 var passes: i64 = 0 137 if c1 == 1 { passes = passes + 1 } 138 if c2 == 1 { passes = passes + 1 } 139 if c3 == 1 { passes = passes + 1 } 140 var ok: i64 = 0 141 if c1 == 1 { if c2 == 1 { if c3 == 1 { if nc == 0 { ok = 1 } } } } 142 143 var p2: i64 = 0 144 while p2 < 2 { 145 var fd: i64 = 1 146 if p2 == 1 { fd = sys_openat_append(PU_LOG, 0x1a4) } 147 if fd >= 0 { 148 pu_w(fd, "PHYSUNITS-GATE checks=" as *u8); pu_wn(fd, passes); pu_w(fd, "/3" as *u8) 149 pu_w(fd, " neg_ok=" as *u8); if nc == 0 { pu_w(fd, "1" as *u8) } else { pu_w(fd, "0" as *u8) } 150 pu_w(fd, " model=integer-exact-7dim" as *u8) 151 if ok == 1 { pu_w(fd, " verdict=GREEN\n" as *u8) } else { pu_w(fd, " verdict=RED\n" as *u8) } 152 if p2 == 1 { sys_close(fd) } 153 } 154 p2 = p2 + 1 155 } 156 if ok == 1 { sys_exit(0); return 0 } 157 sys_exit(1) 158 return 1 159}