nx_dr_ocm_gate.nx source
↩ module page · 87 lines · 3891 B
1// nx_dr_ocm_gate.nx -- KAT + neg-control for the opportunity-cost research ranker (DR-6).
2// Proves: priority monotonic up in value/momentum and DOWN in cost (the opportunity-
3// cost denominator), integer sqrt + FutureWeaver geomean pre-score, cost-aware ranking,
4// opportunity-cost = forgone best alternative, budget-aware greedy selection, and the
5// NEG-CONTROL: a cost-IGNORING ranker leads a DIFFERENT vector (so the cost denominator
6// genuinely changes the decision). DRY nx_gate_verdict lib (D001 migrate-on-touch).
7import "nx_dr_ocm.nx"
8import "nx_gate_verdict.nx"
9
10func main() -> i64 {
11 let ctr: *i64 = gv_ctr()
12 gv_head("nx_dr_ocm -- sovereign opportunity-cost research ranker (DR-6)")
13
14 // T1: priority rises with value (M,C fixed)
15 var ok1: i64 = 0
16 if ocm_priority(9, 5, 3) > ocm_priority(4, 5, 3) { ok1 = 1 }
17 gv_check("T1 priority increases with value", ok1, ctr)
18
19 // T2: priority rises with momentum
20 var ok2: i64 = 0
21 if ocm_priority(5, 9, 3) > ocm_priority(5, 4, 3) { ok2 = 1 }
22 gv_check("T2 priority increases with momentum", ok2, ctr)
23
24 // T3: priority FALLS as cost rises (the opportunity-cost denominator)
25 var ok3: i64 = 0
26 if ocm_priority(5, 5, 2) > ocm_priority(5, 5, 8) { ok3 = 1 }
27 gv_check("T3 priority decreases with cost", ok3, ctr)
28
29 // T4: integer sqrt exact
30 var ok4: i64 = 0
31 if ocm_isqrt(144) == 12 { if ocm_isqrt(1000000) == 1000 { if ocm_isqrt(0) == 0 { ok4 = 1 } } }
32 gv_check("T4 integer sqrt exact", ok4, ctr)
33
34 // T5: FutureWeaver cheap pre-score g = geomean(self-consistency, prior)
35 var ok5: i64 = 0
36 if ocm_gscore(4, 9) == 6 { ok5 = 1 }
37 gv_check("T5 FutureWeaver g geomean", ok5, ctr)
38
39 // 4 candidate research vectors (V,M,C)
40 let v: *i64 = sys_mmap(4 * 8) as *i64
41 let m: *i64 = sys_mmap(4 * 8) as *i64
42 let c: *i64 = sys_mmap(4 * 8) as *i64
43 v[0] = 8; m[0] = 9; c[0] = 3 // pr 24000
44 v[1] = 9; m[1] = 8; c[1] = 6 // pr 12000
45 v[2] = 5; m[2] = 10; c[2] = 1 // pr 50000 (cheap + high momentum = best value-for-cost)
46 v[3] = 10; m[3] = 10; c[3] = 10 // pr 10000 (highest raw V*M=100 but expensive)
47 let pr: *i64 = sys_mmap(4 * 8) as *i64
48 ocm_fill_priorities(v, m, c, 4, pr)
49 let ord: *i64 = sys_mmap(4 * 8) as *i64
50 ocm_rank(pr, 4, ord)
51
52 // T6: cost-aware ranker puts vec2 (cheap/high-momentum) first
53 var ok6: i64 = 0
54 if ord[0] == 2 { ok6 = 1 }
55 gv_check("T6 cost-aware ranker leads vec2", ok6, ctr)
56
57 // T7: opportunity cost of the top pick = forgone best alternative (vec0 pr 24000); last=0
58 let oc: *i64 = sys_mmap(4 * 8) as *i64
59 ocm_opp_cost(pr, ord, 4, oc)
60 var ok7: i64 = 0
61 if oc[0] == 24000 { if oc[3] == 0 { ok7 = 1 } }
62 gv_check("T7 opportunity cost is forgone best alternative", ok7, ctr)
63
64 // T8: budget-aware greedy under B=10 picks {2,0,1} (cost 1+3+6=10), defers vec3
65 let sel: *i64 = sys_mmap(4 * 8) as *i64
66 let spent: *i64 = sys_mmap(8) as *i64
67 let cnt: i64 = ocm_select(pr, c, ord, 4, 10, sel, spent)
68 var ok8: i64 = 0
69 if cnt == 3 { if spent[0] == 10 { if sel[3] == 0 { ok8 = 1 } } }
70 gv_check("T8 budget-aware greedy fits budget defers vec3", ok8, ctr)
71
72 // T9 NEG-CONTROL: a cost-IGNORING ranker (score=V*M) leads a DIFFERENT vector
73 // (vec3, raw V*M=100) than the cost-aware ranker (vec2) -> the cost denominator
74 // (opportunity cost) genuinely changes the decision.
75 let raw: *i64 = sys_mmap(4 * 8) as *i64
76 var i: i64 = 0
77 while i < 4 { raw[i] = v[i] * m[i]; i = i + 1 }
78 let rord: *i64 = sys_mmap(4 * 8) as *i64
79 ocm_rank(raw, 4, rord)
80 var ok9: i64 = 0
81 if rord[0] == 3 { if ord[0] != rord[0] { ok9 = 1 } }
82 gv_check("T9 neg-control cost changes the decision", ok9, ctr)
83
84 let rc: i64 = gv_verdict("DR-OCM", ctr, "priority+isqrt+geomean+rank+oppcost+budget, neg-control")
85 sys_exit(rc)
86 return rc
87}