code wiki / (root) / nx_de_referee_gate.nx

nx_de_referee_gate.nx source

↩ module page · 149 lines · 8030 B

1// nx_de_referee_gate.nx -- THE GATE FOR THE PER-REGION CIEDE2000 REFEREE, 2026-09-03. 2// 3// SUBJECT: dr_region_de / dr_run in-process (nx_de_referee_lib has no main). 4// 5// THE THREE TEETH THAT CARRY THE CLAIM ARE T4, T5 AND T9, and every one of them is a law the estate has 6// already been bitten by: 7// T4 ZERO REGIONS MUST NOT PASS. A tooth that passes on the empty set is not a tooth, and a referee that 8// returns PASS when it measured nothing is the most dangerous possible green. 9// T5 ALL-UNOBSERVED MUST NOT PASS either -- declaring regions and sampling none of them is the same 10// vacuum wearing a denominator. 11// T9 AN UNOBSERVED REGION RESCUES NOTHING. If one measured region is out of tolerance, adding empty 12// regions beside it must not turn the verdict green. That is the abstain-never-acquit law in the one 13// direction where getting it wrong is silent. 14// 15// Teeth, in order: 16// T1 identical colours give a difference of exactly zero. 17// T2 a real difference is non-zero (so T1 cannot pass on a stub that always returns zero). 18// T3 the WORST region is correctly identified, not the first or the last. 19// T4 zero declared regions -> ABSTAIN, never PASS. 20// T5 all regions unobserved -> ABSTAIN, never PASS. 21// T6 the partition RECONCILES: measured + unobserved == declared, always. 22// T7 a render inside tolerance PASSES. 23// T8 a render outside tolerance FAILS -- with T7 this proves the verdict is not a constant. 24// T9 an unobserved region does not rescue a failing measured one. 25// T10 NEG-CONTROL: a non-positive tolerance REFUSES rather than judging against nothing. 26// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0 27import "nx_syscalls.nx" 28import "nx_gate_verdict.nx" 29import "nx_de_referee_lib.nx" 30 31const DG_SLOT: i64 = 8 32const DG_LAB: i64 = 3 33const DG_N: i64 = 4 34const DG_MICRO: i64 = 1000000 35 36func dg_q(micro: i64) -> i64 { return fq_div(fq_from_int(micro), fq_from_int(DG_MICRO)) } 37 38func main(argc: i64, argv: *i64) -> i64 { 39 let ctr: *i64 = gv_ctr() 40 gv_head("nx_de_referee gate -- CIEDE2000 per body region, and the three ways a referee can lie about a green" as *u8) 41 42 let cs: *i64 = cs_ctx() 43 let out: *i64 = sys_mmap(DR_O_SLOTS * DG_SLOT) as *i64 44 45 let refs: *i64 = sys_mmap(DG_N * DG_LAB * DG_SLOT) as *i64 46 let rnds: *i64 = sys_mmap(DG_N * DG_LAB * DG_SLOT) as *i64 47 let counts: *i64 = sys_mmap(DG_N * DG_SLOT) as *i64 48 var i: i64 = 0 49 while i < DG_N { 50 refs[i * DG_LAB + 0] = dg_q(65000000) 51 refs[i * DG_LAB + 1] = dg_q(12000000) 52 refs[i * DG_LAB + 2] = dg_q(15000000) 53 rnds[i * DG_LAB + 0] = dg_q(65000000) 54 rnds[i * DG_LAB + 1] = dg_q(12000000) 55 rnds[i * DG_LAB + 2] = dg_q(15000000) 56 counts[i] = 100 57 i = i + 1 58 } 59 60 let d0: i64 = dr_region_de(cs, refs, rnds) 61 gv_puts(" [T1] identical colours -> de_micro=" as *u8); gv_num(fq_to_micro(d0)); gv_puts("\n" as *u8) 62 gv_check("identical-colours-give-a-difference-of-exactly-zero" as *u8, (d0 == 0) as i64, ctr) 63 64 let far: *i64 = sys_mmap(DG_LAB * DG_SLOT) as *i64 65 far[0] = dg_q(72000000) 66 far[1] = dg_q(4000000) 67 far[2] = dg_q(22000000) 68 let d1: i64 = dr_region_de(cs, refs, far) 69 gv_puts(" [T2] a real difference -> de_micro=" as *u8); gv_num(fq_to_micro(d1)); gv_puts("\n" as *u8) 70 gv_check("a-real-difference-is-non-zero (so T1 cannot pass on a stub that always returns zero)" as *u8, (d1 > 0) as i64, ctr) 71 72 rnds[2 * DG_LAB + 0] = dg_q(72000000) 73 rnds[2 * DG_LAB + 1] = dg_q(4000000) 74 rnds[2 * DG_LAB + 2] = dg_q(22000000) 75 rnds[1 * DG_LAB + 0] = dg_q(66000000) 76 let tol_wide: i64 = dg_q(50000000) 77 let v3: i64 = dr_run(cs, refs, rnds, counts, DG_N, tol_wide, out) 78 gv_puts(" [T3] worst_idx=" as *u8); gv_num(out[DR_O_WORST_IDX]) 79 gv_puts(" worst_de_micro=" as *u8); gv_num(fq_to_micro(out[DR_O_WORST_DE])) 80 gv_puts(" mean_micro=" as *u8); gv_num(fq_to_micro(out[DR_O_MEAN_DE])); gv_puts("\n" as *u8) 81 gv_check("the-WORST-region-is-identified-not-the-first-or-the-last" as *u8, (out[DR_O_WORST_IDX] == 2) as i64, ctr) 82 83 let v4: i64 = dr_run(cs, refs, rnds, counts, 0, tol_wide, out) 84 gv_puts(" [T4] zero declared regions -> " as *u8); gv_puts(dr_verdict_name(v4)) 85 gv_puts(" measured=" as *u8); gv_num(out[DR_O_MEASURED]); gv_puts("\n" as *u8) 86 gv_check("ZERO-declared-regions-ABSTAINS-and-never-passes (a tooth that passes on the empty set is not a tooth)" as *u8, (v4 == DR_ABSTAIN) as i64, ctr) 87 88 var z: i64 = 0 89 while z < DG_N { 90 counts[z] = 0 91 z = z + 1 92 } 93 let v5: i64 = dr_run(cs, refs, rnds, counts, DG_N, tol_wide, out) 94 gv_puts(" [T5] all regions unobserved -> " as *u8); gv_puts(dr_verdict_name(v5)) 95 gv_puts(" measured=" as *u8); gv_num(out[DR_O_MEASURED]); gv_puts(" unobserved=" as *u8); gv_num(out[DR_O_UNOBSERVED]); gv_puts("\n" as *u8) 96 gv_check("ALL-regions-unobserved-ABSTAINS-and-never-passes" as *u8, (v5 == DR_ABSTAIN) as i64, ctr) 97 98 counts[0] = 50 99 counts[1] = 0 100 counts[2] = 80 101 counts[3] = 0 102 let v6: i64 = dr_run(cs, refs, rnds, counts, DG_N, tol_wide, out) 103 let sum6: i64 = out[DR_O_MEASURED] + out[DR_O_UNOBSERVED] 104 gv_puts(" [T6] measured=" as *u8); gv_num(out[DR_O_MEASURED]) 105 gv_puts(" unobserved=" as *u8); gv_num(out[DR_O_UNOBSERVED]) 106 gv_puts(" declared=" as *u8); gv_num(out[DR_O_DECLARED]) 107 gv_puts(" sum=" as *u8); gv_num(sum6); gv_puts("\n" as *u8) 108 gv_check("the-partition-RECONCILES-measured-plus-unobserved-equals-declared" as *u8, (sum6 == out[DR_O_DECLARED]) as i64, ctr) 109 110 var w: i64 = 0 111 while w < DG_N { 112 rnds[w * DG_LAB + 0] = refs[w * DG_LAB + 0] 113 rnds[w * DG_LAB + 1] = refs[w * DG_LAB + 1] 114 rnds[w * DG_LAB + 2] = refs[w * DG_LAB + 2] 115 counts[w] = 100 116 w = w + 1 117 } 118 rnds[1 * DG_LAB + 0] = dg_q(65200000) 119 let tol_tight: i64 = dg_q(2000000) 120 let v7: i64 = dr_run(cs, refs, rnds, counts, DG_N, tol_tight, out) 121 gv_puts(" [T7] near render -> " as *u8); gv_puts(dr_verdict_name(v7)) 122 gv_puts(" worst_micro=" as *u8); gv_num(fq_to_micro(out[DR_O_WORST_DE])) 123 gv_puts(" tol_micro=" as *u8); gv_num(fq_to_micro(tol_tight)); gv_puts("\n" as *u8) 124 gv_check("a-render-inside-the-declared-tolerance-PASSES" as *u8, (v7 == DR_PASS) as i64, ctr) 125 126 rnds[3 * DG_LAB + 0] = dg_q(72000000) 127 rnds[3 * DG_LAB + 1] = dg_q(4000000) 128 rnds[3 * DG_LAB + 2] = dg_q(22000000) 129 let v8: i64 = dr_run(cs, refs, rnds, counts, DG_N, tol_tight, out) 130 gv_puts(" [T8] far render -> " as *u8); gv_puts(dr_verdict_name(v8)) 131 gv_puts(" worst_idx=" as *u8); gv_num(out[DR_O_WORST_IDX]) 132 gv_puts(" worst_micro=" as *u8); gv_num(fq_to_micro(out[DR_O_WORST_DE])); gv_puts("\n" as *u8) 133 gv_check("a-render-outside-the-declared-tolerance-FAILS (with T7 this proves the verdict is not a constant)" as *u8, (v8 == DR_FAIL) as i64, ctr) 134 135 counts[0] = 0 136 counts[1] = 0 137 counts[2] = 0 138 counts[3] = 100 139 let v9: i64 = dr_run(cs, refs, rnds, counts, DG_N, tol_tight, out) 140 gv_puts(" [T9] one failing region, three unobserved -> " as *u8); gv_puts(dr_verdict_name(v9)) 141 gv_puts(" measured=" as *u8); gv_num(out[DR_O_MEASURED]); gv_puts(" unobserved=" as *u8); gv_num(out[DR_O_UNOBSERVED]); gv_puts("\n" as *u8) 142 gv_check("an-unobserved-region-RESCUES-NOTHING (abstain never acquits, in the direction where it is silent)" as *u8, (v9 == DR_FAIL) as i64, ctr) 143 144 let v10: i64 = dr_run(cs, refs, rnds, counts, DG_N, 0, out) 145 gv_puts(" [T10] tolerance=0 -> " as *u8); gv_num(v10); gv_puts(" want=" as *u8); gv_num(DR_REFUSED); gv_puts("\n" as *u8) 146 gv_check("neg-control-a-non-positive-tolerance-REFUSES-rather-than-judging-against-nothing" as *u8, (v10 == DR_REFUSED) as i64, ctr) 147 148 return gv_verdict("de_referee" as *u8, ctr, "CIEDE2000 judged per body region against a declared tolerance, with the empty set abstaining, the partition reconciling, and an unobserved region rescuing nothing" as *u8) 149}