nx_conflict_gate.nx source
↩ module page · 93 lines · 4383 B
1// nx_conflict_gate.nx -- REFEREE for WRITING rung W-ING-5 (nx_conflict).
2// [T1] CONFLICT: "facing forward ... facing backward" (same axis) -> 1 conflict (forward,backward)
3// [T2] CONSISTENT: only "forward" (twice) -> 0 conflicts
4// [T3] MULTI-AXIS: forward/backward AND day/night -> 2 conflicts
5// [T4] NEG-CONTROL cross-axis: "forward at night" (1 per axis) -> 0
6// [T5] NEG-CONTROL whole-word: "forwards" + "backward" (forwards!=forward) -> 0
7// Sovereign x86_64. Exit 0/1. -> knowledge/status/conflict_gate.log
8import "nx_syscalls_x86_64.nx"
9import "nx_conflict.nx"
10
11func gp(logfd: i64, s: *u8) -> i64 {
12 var n: i64 = 0
13 while s[n] != (0 as u8) { n = n + 1 }
14 sys_write(1, s, n)
15 if logfd > 0 { sys_write(logfd, s, n) }
16 return 0
17}
18func gn(logfd: i64, v: i64) -> i64 {
19 var m: i64 = v
20 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m }
21 let bb: *u8 = sys_mmap(32)
22 let t: *u8 = sys_mmap(32)
23 var k: i64 = 0
24 if m == 0 { t[0] = 48 as u8; k = 1 }
25 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
26 var i: i64 = 0
27 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
28 sys_write(1, bb, k)
29 if logfd > 0 { sys_write(logfd, bb, k) }
30 return 0
31}
32func slen(s: *u8) -> i64 {
33 var n: i64 = 0
34 while s[n] != (0 as u8) { n = n + 1 }
35 return n
36}
37func pr_kv(logfd: i64, label: *u8, got: i64, exp: i64) -> i64 {
38 gp(logfd, label); gp(logfd, " got=\x00" as *u8); gn(logfd, got); gp(logfd, " exp=\x00" as *u8); gn(logfd, exp)
39 if got == exp { gp(logfd, " OK\n\x00" as *u8); return 1 }
40 gp(logfd, " FAIL\n\x00" as *u8); return 0
41}
42
43func main() -> i64 {
44 let logfd: i64 = sys_openat_append("knowledge/status/conflict_gate.log\x00" as *u8, 0x1a4)
45 gp(logfd, "CONFLICT-GATE W-ING-5 (mutually-exclusive axis contradiction)\n\x00" as *u8)
46
47 // lexicon: facing axis 0 (forward,backward,left,right), time axis 1 (day,night)
48 let terms: *u8 = "forward\x00backward\x00left\x00right\x00day\x00night\x00" as *u8
49 let axes: *i64 = sys_mmap(64) as *i64
50 axes[0] = 0; axes[1] = 0; axes[2] = 0; axes[3] = 0; axes[4] = 1; axes[5] = 1
51 let out: *i64 = sys_mmap(128) as *i64
52 var ok: i64 = 1
53
54 // T1 conflict
55 gp(logfd, " [T1] \"She was facing forward. Then she was facing backward.\"\n\x00" as *u8)
56 let t1: *u8 = "She was facing forward. Then she was facing backward.\x00" as *u8
57 let c1: i64 = cf_detect(t1, 0, slen(t1), terms, axes, 6, 2, out)
58 if pr_kv(logfd, " nconflicts\x00" as *u8, c1, 1) == 0 { ok = 0 }
59 if pr_kv(logfd, " axis\x00" as *u8, out[0], 0) == 0 { ok = 0 }
60 if pr_kv(logfd, " term_i\x00" as *u8, out[1], 0) == 0 { ok = 0 } // forward
61 if pr_kv(logfd, " term_j\x00" as *u8, out[2], 1) == 0 { ok = 0 } // backward
62
63 // T2 consistent (same term twice)
64 gp(logfd, " [T2] \"She faced forward and stepped forward.\"\n\x00" as *u8)
65 let t2: *u8 = "She faced forward and stepped forward.\x00" as *u8
66 if pr_kv(logfd, " nconflicts\x00" as *u8, cf_detect(t2, 0, slen(t2), terms, axes, 6, 2, out), 0) == 0 { ok = 0 }
67
68 // T3 multi-axis
69 gp(logfd, " [T3] \"Facing forward at night, she turned backward as day broke.\"\n\x00" as *u8)
70 let t3: *u8 = "Facing forward at night, she turned backward as day broke.\x00" as *u8
71 if pr_kv(logfd, " nconflicts\x00" as *u8, cf_detect(t3, 0, slen(t3), terms, axes, 6, 2, out), 2) == 0 { ok = 0 }
72
73 // T4 NEG cross-axis (one value per axis)
74 gp(logfd, " [T4] NEG cross-axis \"forward at night\"\n\x00" as *u8)
75 let t4: *u8 = "She faced forward at night.\x00" as *u8
76 if pr_kv(logfd, " nconflicts\x00" as *u8, cf_detect(t4, 0, slen(t4), terms, axes, 6, 2, out), 0) == 0 { ok = 0 }
77
78 // T5 NEG whole-word (forwards != forward)
79 gp(logfd, " [T5] NEG whole-word \"forwards ... backward\"\n\x00" as *u8)
80 let t5: *u8 = "She moved forwards, then backward.\x00" as *u8
81 if pr_kv(logfd, " nconflicts\x00" as *u8, cf_detect(t5, 0, slen(t5), terms, axes, 6, 2, out), 0) == 0 { ok = 0 }
82
83 if ok == 1 {
84 gp(logfd, "CONFLICT-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8)
85 if logfd > 0 { sys_close(logfd) }
86 sys_exit(0)
87 return 0
88 }
89 gp(logfd, "CONFLICT-GATE result=FAIL verdict=RED\n\x00" as *u8)
90 if logfd > 0 { sys_close(logfd) }
91 sys_exit(1)
92 return 1
93}