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}