code wiki / (root) / nx_conflict_gate.nx

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}