From e2a6cce2f9db5a2c5f9714f4b9e5292dd3a10581 Mon Sep 17 00:00:00 2001 From: Ali Romman <226877337+aliromman@users.noreply.github.com> Date: Sun, 25 Oct 2026 03:33:13 -0500 Subject: [PATCH 1/3] Admit productive P104 caller at conditional kappa 0.00304057 --- .../CONTROLLER.json | 5480 +++++++++++++++++ research/p104-productive-controller/PROOF.md | 212 + research/p104-productive-controller/README.md | 141 + .../p104-productive-controller/RESULT.json | 315 + .../p104-productive-controller/SOURCES.json | 156 + research/p104-productive-controller/TASK.json | 153 + .../p104-productive-controller/VERIFY.json | 45 + .../p104-productive-controller/WORD.json.gz | Bin 0 -> 107034 bytes research/p104-productive-controller/caller.py | 175 + research/p104-productive-controller/local.py | 264 + research/p104-productive-controller/price.py | 153 + research/p104-productive-controller/verify.py | 86 + 12 files changed, 7180 insertions(+) create mode 100644 research/p104-productive-controller/CONTROLLER.json create mode 100644 research/p104-productive-controller/PROOF.md create mode 100644 research/p104-productive-controller/README.md create mode 100644 research/p104-productive-controller/RESULT.json create mode 100644 research/p104-productive-controller/SOURCES.json create mode 100644 research/p104-productive-controller/TASK.json create mode 100644 research/p104-productive-controller/VERIFY.json create mode 100644 research/p104-productive-controller/WORD.json.gz create mode 100644 research/p104-productive-controller/caller.py create mode 100644 research/p104-productive-controller/local.py create mode 100644 research/p104-productive-controller/price.py create mode 100644 research/p104-productive-controller/verify.py diff --git a/research/p104-productive-controller/CONTROLLER.json b/research/p104-productive-controller/CONTROLLER.json new file mode 100644 index 0000000000..cc539db709 --- /dev/null +++ b/research/p104-productive-controller/CONTROLLER.json @@ -0,0 +1,5480 @@ +{ + "ambient_rank": 145, + "boundaries": { + "left": [ + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "1", + "0", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ] + ], + "left_program": [ + [ + "SWAP", + 30, + 31 + ], + [ + "SWAP", + 29, + 30 + ], + [ + "SWAP", + 28, + 30 + ], + [ + "SWAP", + 27, + 29 + ], + [ + "SWAP", + 26, + 28 + ], + [ + "SWAP", + 25, + 30 + ], + [ + "SWAP", + 24, + 25 + ], + [ + "SWAP", + 23, + 26 + ], + [ + "SWAP", + 22, + 30 + ], + [ + "SWAP", + 20, + 26 + ], + [ + "SWAP", + 19, + 22 + ], + [ + "SWAP", + 18, + 29 + ], + [ + "SWAP", + 17, + 23 + ], + [ + "SWAP", + 16, + 27 + ], + [ + "SCALE", + 15, + "-1" + ], + [ + "SWAP", + 15, + 31 + ], + [ + "ADD", + 12, + 14, + "1" + ], + [ + "ADD", + 10, + 14, + "-1" + ], + [ + "ADD", + 8, + 14, + "1" + ], + [ + "ADD", + 6, + 14, + "-1" + ], + [ + "ADD", + 4, + 14, + "1" + ], + [ + "ADD", + 2, + 14, + "-1" + ], + [ + "ADD", + 0, + 14, + "1" + ], + [ + "SWAP", + 14, + 15 + ], + [ + "ADD", + 31, + 13, + "1" + ], + [ + "SWAP", + 13, + 30 + ], + [ + "ADD", + 10, + 12, + "1" + ], + [ + "ADD", + 8, + 12, + "-1" + ], + [ + "ADD", + 6, + 12, + "1" + ], + [ + "ADD", + 4, + 12, + "-1" + ], + [ + "ADD", + 2, + 12, + "1" + ], + [ + "ADD", + 0, + 12, + "-1" + ], + [ + "SWAP", + 12, + 14 + ], + [ + "ADD", + 31, + 11, + "-1" + ], + [ + "ADD", + 30, + 11, + "-1" + ], + [ + "SCALE", + 11, + "-1" + ], + [ + "SWAP", + 11, + 29 + ], + [ + "ADD", + 8, + 10, + "1" + ], + [ + "ADD", + 6, + 10, + "-1" + ], + [ + "ADD", + 4, + 10, + "1" + ], + [ + "ADD", + 2, + 10, + "-1" + ], + [ + "ADD", + 0, + 10, + "1" + ], + [ + "SWAP", + 10, + 13 + ], + [ + "ADD", + 31, + 9, + "1" + ], + [ + "ADD", + 30, + 9, + "1" + ], + [ + "ADD", + 29, + 9, + "1" + ], + [ + "SWAP", + 9, + 28 + ], + [ + "ADD", + 6, + 8, + "1" + ], + [ + "ADD", + 4, + 8, + "-1" + ], + [ + "ADD", + 2, + 8, + "1" + ], + [ + "ADD", + 0, + 8, + "-1" + ], + [ + "SWAP", + 8, + 12 + ], + [ + "ADD", + 31, + 7, + "-1" + ], + [ + "ADD", + 30, + 7, + "-1" + ], + [ + "ADD", + 29, + 7, + "-1" + ], + [ + "ADD", + 28, + 7, + "-1" + ], + [ + "SCALE", + 7, + "-1" + ], + [ + "SWAP", + 7, + 27 + ], + [ + "ADD", + 4, + 6, + "1" + ], + [ + "ADD", + 2, + 6, + "-1" + ], + [ + "ADD", + 0, + 6, + "1" + ], + [ + "SWAP", + 6, + 11 + ], + [ + "ADD", + 31, + 5, + "1" + ], + [ + "ADD", + 30, + 5, + "1" + ], + [ + "ADD", + 29, + 5, + "1" + ], + [ + "ADD", + 28, + 5, + "1" + ], + [ + "ADD", + 27, + 5, + "1" + ], + [ + "SWAP", + 5, + 26 + ], + [ + "ADD", + 2, + 4, + "1" + ], + [ + "ADD", + 0, + 4, + "-1" + ], + [ + "SWAP", + 4, + 10 + ], + [ + "ADD", + 31, + 3, + "-1" + ], + [ + "ADD", + 30, + 3, + "-1" + ], + [ + "ADD", + 29, + 3, + "-1" + ], + [ + "ADD", + 28, + 3, + "-1" + ], + [ + "ADD", + 27, + 3, + "-1" + ], + [ + "ADD", + 26, + 3, + "-1" + ], + [ + "SCALE", + 3, + "-1" + ], + [ + "SWAP", + 3, + 25 + ], + [ + "ADD", + 0, + 2, + "1" + ], + [ + "SWAP", + 2, + 9 + ], + [ + "ADD", + 31, + 1, + "1" + ], + [ + "ADD", + 30, + 1, + "1" + ], + [ + "ADD", + 29, + 1, + "1" + ], + [ + "ADD", + 28, + 1, + "1" + ], + [ + "ADD", + 27, + 1, + "1" + ], + [ + "ADD", + 26, + 1, + "1" + ], + [ + "ADD", + 25, + 1, + "1" + ], + [ + "SWAP", + 1, + 24 + ], + [ + "SWAP", + 0, + 8 + ] + ], + "right": [ + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "1", + "-1", + "1", + "-1", + "1", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "1", + "-1", + "1", + "-1", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "1", + "-1", + "1", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "-1", + "1", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "1", + "-1", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "1", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "-1", + "1", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "-1", + "1", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "-1" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ] + ], + "right_program": [ + [ + "ADD", + 30, + 31, + "-1" + ], + [ + "ADD", + 29, + 31, + "-1" + ], + [ + "ADD", + 28, + 31, + "-1" + ], + [ + "ADD", + 27, + 31, + "-1" + ], + [ + "SCALE", + 31, + "-1" + ], + [ + "ADD", + 31, + 30, + "-1" + ], + [ + "ADD", + 29, + 30, + "-1" + ], + [ + "ADD", + 28, + 30, + "-1" + ], + [ + "ADD", + 27, + 30, + "-1" + ], + [ + "ADD", + 31, + 29, + "-1" + ], + [ + "ADD", + 28, + 29, + "-1" + ], + [ + "ADD", + 27, + 29, + "-1" + ], + [ + "SCALE", + 29, + "-1" + ], + [ + "ADD", + 31, + 28, + "-1" + ], + [ + "ADD", + 27, + 28, + "-1" + ], + [ + "SWAP", + 28, + 29 + ], + [ + "ADD", + 31, + 27, + "-1" + ], + [ + "SCALE", + 27, + "-1" + ], + [ + "SWAP", + 27, + 29 + ], + [ + "ADD", + 31, + 26, + "1" + ], + [ + "SWAP", + 26, + 29 + ], + [ + "ADD", + 29, + 25, + "-1" + ], + [ + "ADD", + 24, + 25, + "-1" + ], + [ + "SWAP", + 25, + 28 + ], + [ + "ADD", + 28, + 24, + "1" + ], + [ + "SWAP", + 23, + 29 + ], + [ + "SWAP", + 22, + 25 + ], + [ + "SWAP", + 20, + 23 + ], + [ + "SWAP", + 19, + 25 + ], + [ + "SWAP", + 18, + 27 + ], + [ + "SWAP", + 17, + 29 + ], + [ + "SWAP", + 16, + 31 + ], + [ + "ADD", + 14, + 15, + "-1" + ], + [ + "SWAP", + 15, + 30 + ], + [ + "ADD", + 13, + 14, + "-1" + ], + [ + "SWAP", + 14, + 30 + ], + [ + "ADD", + 12, + 13, + "-1" + ], + [ + "SWAP", + 13, + 22 + ], + [ + "ADD", + 11, + 12, + "-1" + ], + [ + "SWAP", + 12, + 30 + ], + [ + "ADD", + 10, + 11, + "-1" + ], + [ + "SWAP", + 11, + 18 + ], + [ + "ADD", + 9, + 10, + "-1" + ], + [ + "SWAP", + 10, + 22 + ], + [ + "ADD", + 8, + 9, + "-1" + ], + [ + "SWAP", + 9, + 26 + ], + [ + "SWAP", + 8, + 30 + ], + [ + "SWAP", + 7, + 16 + ], + [ + "SWAP", + 6, + 18 + ], + [ + "SWAP", + 5, + 20 + ], + [ + "SWAP", + 4, + 22 + ], + [ + "SWAP", + 3, + 24 + ], + [ + "SWAP", + 2, + 26 + ], + [ + "SWAP", + 1, + 28 + ], + [ + "SWAP", + 0, + 30 + ] + ] + }, + "diagonal": [ + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + -1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + -1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + [ + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ] + ], + "keep_mask": 35047648968703, + "kind": "complex", + "pairs": 16, + "physical_events": [ + [ + "LOCAL", + 0, + 0, + false + ], + [ + "Q_POWER", + 0, + -2 + ], + [ + "SIGNED_SWAP", + 0, + 1 + ], + [ + "LOCAL", + 1, + 0, + false + ], + [ + "Q_POWER", + 1, + 2 + ], + [ + "SIGNED_SWAP", + 1, + 0 + ], + [ + "IDLE", + 1, + [ + 0, + 1 + ] + ], + [ + "ADD", + 0, + 2, + 1 + ], + [ + "ADD", + 3, + 1, + -1 + ], + [ + "QUERY_SHEAR", + 2, + 0, + false + ], + [ + "ADD", + 0, + 2, + -1 + ], + [ + "ADD", + 3, + 1, + 1 + ], + [ + "Q_POWER", + 2, + -2 + ], + [ + "SIGNED_SWAP", + 2, + 3 + ], + [ + "LOCAL", + 3, + 1, + false + ], + [ + "Q_POWER", + 3, + 2 + ], + [ + "SIGNED_SWAP", + 3, + 2 + ], + [ + "IDLE", + 2, + [ + 0, + 1, + 3 + ] + ], + [ + "ADD", + 2, + 4, + 1 + ], + [ + "ADD", + 5, + 3, + -1 + ], + [ + "QUERY_SHEAR", + 4, + 1, + false + ], + [ + "ADD", + 2, + 4, + -1 + ], + [ + "ADD", + 5, + 3, + 1 + ], + [ + "Q_POWER", + 4, + -2 + ], + [ + "SIGNED_SWAP", + 4, + 5 + ], + [ + "LOCAL", + 5, + 2, + false + ], + [ + "Q_POWER", + 5, + 2 + ], + [ + "SIGNED_SWAP", + 5, + 4 + ], + [ + "IDLE", + 3, + [ + 0, + 1, + 3, + 5 + ] + ], + [ + "ADD", + 4, + 6, + 1 + ], + [ + "ADD", + 7, + 5, + -1 + ], + [ + "QUERY_SHEAR", + 6, + 2, + false + ], + [ + "ADD", + 4, + 6, + -1 + ], + [ + "ADD", + 7, + 5, + 1 + ], + [ + "Q_POWER", + 6, + -2 + ], + [ + "SIGNED_SWAP", + 6, + 7 + ], + [ + "LOCAL", + 7, + 3, + false + ], + [ + "Q_POWER", + 7, + 2 + ], + [ + "SIGNED_SWAP", + 7, + 6 + ], + [ + "IDLE", + 4, + [ + 0, + 1, + 3, + 5, + 7 + ] + ], + [ + "ADD", + 6, + 8, + 1 + ], + [ + "ADD", + 9, + 7, + -1 + ], + [ + "QUERY_SHEAR", + 8, + 3, + false + ], + [ + "ADD", + 6, + 8, + -1 + ], + [ + "ADD", + 9, + 7, + 1 + ], + [ + "Q_POWER", + 8, + -2 + ], + [ + "SIGNED_SWAP", + 8, + 9 + ], + [ + "LOCAL", + 9, + 4, + false + ], + [ + "Q_POWER", + 9, + 2 + ], + [ + "SIGNED_SWAP", + 9, + 8 + ], + [ + "IDLE", + 5, + [ + 0, + 1, + 3, + 5, + 7, + 9 + ] + ], + [ + "ADD", + 8, + 10, + 1 + ], + [ + "ADD", + 11, + 9, + -1 + ], + [ + "QUERY_SHEAR", + 10, + 4, + false + ], + [ + "ADD", + 8, + 10, + -1 + ], + [ + "ADD", + 11, + 9, + 1 + ], + [ + "Q_POWER", + 10, + -2 + ], + [ + "SIGNED_SWAP", + 10, + 11 + ], + [ + "LOCAL", + 11, + 5, + false + ], + [ + "Q_POWER", + 11, + 2 + ], + [ + "SIGNED_SWAP", + 11, + 10 + ], + [ + "IDLE", + 6, + [ + 0, + 1, + 3, + 5, + 7, + 9, + 11 + ] + ], + [ + "ADD", + 10, + 12, + 1 + ], + [ + "ADD", + 13, + 11, + -1 + ], + [ + "QUERY_SHEAR", + 12, + 5, + false + ], + [ + "ADD", + 10, + 12, + -1 + ], + [ + "ADD", + 13, + 11, + 1 + ], + [ + "Q_POWER", + 12, + -2 + ], + [ + "SIGNED_SWAP", + 12, + 13 + ], + [ + "LOCAL", + 13, + 6, + false + ], + [ + "Q_POWER", + 13, + 2 + ], + [ + "SIGNED_SWAP", + 13, + 12 + ], + [ + "IDLE", + 7, + [ + 0, + 1, + 3, + 5, + 7, + 9, + 11, + 13 + ] + ], + [ + "ADD", + 12, + 14, + 1 + ], + [ + "ADD", + 15, + 13, + -1 + ], + [ + "QUERY_SHEAR", + 14, + 6, + false + ], + [ + "ADD", + 12, + 14, + -1 + ], + [ + "ADD", + 15, + 13, + 1 + ], + [ + "Q_POWER", + 14, + -2 + ], + [ + "SIGNED_SWAP", + 14, + 15 + ], + [ + "LOCAL", + 15, + 7, + false + ], + [ + "Q_POWER", + 15, + 2 + ], + [ + "SIGNED_SWAP", + 15, + 14 + ], + [ + "ADD", + 14, + 16, + 1 + ], + [ + "ADD", + 17, + 15, + -1 + ], + [ + "QUERY_SHEAR", + 16, + 7, + false + ], + [ + "ADD", + 14, + 16, + -1 + ], + [ + "ADD", + 17, + 15, + 1 + ], + [ + "Q_POWER", + 16, + -2 + ], + [ + "SIGNED_SWAP", + 16, + 17 + ], + [ + "LOCAL", + 17, + 8, + false + ], + [ + "Q_POWER", + 17, + 2 + ], + [ + "SIGNED_SWAP", + 17, + 16 + ], + [ + "ADD", + 16, + 18, + 1 + ], + [ + "ADD", + 19, + 17, + -1 + ], + [ + "QUERY_SHEAR", + 18, + 8, + false + ], + [ + "ADD", + 16, + 18, + -1 + ], + [ + "ADD", + 19, + 17, + 1 + ], + [ + "Q_POWER", + 18, + -2 + ], + [ + "SIGNED_SWAP", + 18, + 19 + ], + [ + "LOCAL", + 19, + 9, + false + ], + [ + "Q_POWER", + 19, + 2 + ], + [ + "SIGNED_SWAP", + 19, + 18 + ], + [ + "ADD", + 18, + 20, + 1 + ], + [ + "ADD", + 21, + 19, + -1 + ], + [ + "QUERY_SHEAR", + 20, + 9, + false + ], + [ + "ADD", + 18, + 20, + -1 + ], + [ + "ADD", + 21, + 19, + 1 + ], + [ + "Q_POWER", + 20, + -2 + ], + [ + "SIGNED_SWAP", + 20, + 21 + ], + [ + "LOCAL", + 21, + 10, + false + ], + [ + "Q_POWER", + 21, + 2 + ], + [ + "SIGNED_SWAP", + 21, + 20 + ], + [ + "ADD", + 20, + 22, + 1 + ], + [ + "ADD", + 23, + 21, + -1 + ], + [ + "QUERY_SHEAR", + 22, + 10, + false + ], + [ + "ADD", + 20, + 22, + -1 + ], + [ + "ADD", + 23, + 21, + 1 + ], + [ + "Q_POWER", + 22, + -2 + ], + [ + "SIGNED_SWAP", + 22, + 23 + ], + [ + "LOCAL", + 23, + 11, + false + ], + [ + "Q_POWER", + 23, + 2 + ], + [ + "SIGNED_SWAP", + 23, + 22 + ], + [ + "ADD", + 22, + 24, + 1 + ], + [ + "ADD", + 25, + 23, + -1 + ], + [ + "QUERY_SHEAR", + 24, + 11, + false + ], + [ + "ADD", + 22, + 24, + -1 + ], + [ + "ADD", + 25, + 23, + 1 + ], + [ + "Q_POWER", + 24, + -2 + ], + [ + "SIGNED_SWAP", + 24, + 25 + ], + [ + "LOCAL", + 25, + 12, + false + ], + [ + "Q_POWER", + 25, + 2 + ], + [ + "SIGNED_SWAP", + 25, + 24 + ], + [ + "ADD", + 24, + 26, + 1 + ], + [ + "ADD", + 27, + 25, + -1 + ], + [ + "QUERY_SHEAR", + 26, + 12, + false + ], + [ + "ADD", + 24, + 26, + -1 + ], + [ + "ADD", + 27, + 25, + 1 + ], + [ + "Q_POWER", + 26, + -2 + ], + [ + "SIGNED_SWAP", + 26, + 27 + ], + [ + "LOCAL", + 27, + 13, + false + ], + [ + "Q_POWER", + 27, + 2 + ], + [ + "SIGNED_SWAP", + 27, + 26 + ], + [ + "ADD", + 26, + 28, + 1 + ], + [ + "ADD", + 29, + 27, + -1 + ], + [ + "QUERY_SHEAR", + 28, + 13, + false + ], + [ + "ADD", + 26, + 28, + -1 + ], + [ + "ADD", + 29, + 27, + 1 + ], + [ + "Q_POWER", + 28, + -2 + ], + [ + "SIGNED_SWAP", + 28, + 29 + ], + [ + "LOCAL", + 29, + 14, + false + ], + [ + "Q_POWER", + 29, + 2 + ], + [ + "SIGNED_SWAP", + 29, + 28 + ], + [ + "ADD", + 28, + 30, + 1 + ], + [ + "ADD", + 31, + 29, + -1 + ], + [ + "QUERY_SHEAR", + 30, + 14, + false + ], + [ + "ADD", + 28, + 30, + -1 + ], + [ + "ADD", + 31, + 29, + 1 + ], + [ + "Q_POWER", + 30, + -2 + ], + [ + "SIGNED_SWAP", + 30, + 31 + ], + [ + "LOCAL", + 31, + 15, + false + ], + [ + "Q_POWER", + 31, + 2 + ], + [ + "SIGNED_SWAP", + 31, + 30 + ], + [ + "LOCAL", + 32, + 15, + false + ], + [ + "IDLE", + 7, + [ + 17, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 32 + ] + ], + [ + "IDLE", + 8, + [ + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 32 + ] + ], + [ + "IDLE", + 9, + [ + 21, + 23, + 25, + 27, + 29, + 31, + 32 + ] + ], + [ + "IDLE", + 10, + [ + 23, + 25, + 27, + 29, + 31, + 32 + ] + ], + [ + "IDLE", + 11, + [ + 25, + 27, + 29, + 31, + 32 + ] + ], + [ + "IDLE", + 12, + [ + 27, + 29, + 31, + 32 + ] + ], + [ + "IDLE", + 13, + [ + 29, + 31, + 32 + ] + ], + [ + "IDLE", + 14, + [ + 31, + 32 + ] + ], + [ + "ADD", + 30, + 28, + 1 + ], + [ + "ADD", + 29, + 31, + -1 + ], + [ + "ADD", + 28, + 26, + 1 + ], + [ + "ADD", + 27, + 29, + -1 + ], + [ + "ADD", + 26, + 24, + 1 + ], + [ + "ADD", + 25, + 27, + -1 + ], + [ + "ADD", + 24, + 22, + 1 + ], + [ + "ADD", + 23, + 25, + -1 + ], + [ + "ADD", + 22, + 20, + 1 + ], + [ + "ADD", + 21, + 23, + -1 + ], + [ + "ADD", + 20, + 18, + 1 + ], + [ + "ADD", + 19, + 21, + -1 + ], + [ + "ADD", + 18, + 16, + 1 + ], + [ + "ADD", + 17, + 19, + -1 + ], + [ + "ADD", + 16, + 14, + 1 + ], + [ + "ADD", + 15, + 17, + -1 + ], + [ + "ADD", + 14, + 12, + 1 + ], + [ + "ADD", + 13, + 15, + -1 + ], + [ + "ADD", + 12, + 10, + 1 + ], + [ + "ADD", + 11, + 13, + -1 + ], + [ + "ADD", + 10, + 8, + 1 + ], + [ + "ADD", + 9, + 11, + -1 + ], + [ + "ADD", + 8, + 6, + 1 + ], + [ + "ADD", + 7, + 9, + -1 + ], + [ + "ADD", + 6, + 4, + 1 + ], + [ + "ADD", + 5, + 7, + -1 + ], + [ + "ADD", + 4, + 2, + 1 + ], + [ + "ADD", + 3, + 5, + -1 + ], + [ + "ADD", + 2, + 0, + 1 + ], + [ + "ADD", + 1, + 3, + -1 + ], + [ + "SIGNED_SWAP", + 0, + 1 + ], + [ + "SIGNED_SWAP", + 2, + 3 + ], + [ + "SIGNED_SWAP", + 4, + 5 + ], + [ + "SIGNED_SWAP", + 6, + 7 + ], + [ + "SIGNED_SWAP", + 8, + 9 + ], + [ + "SIGNED_SWAP", + 10, + 11 + ], + [ + "SIGNED_SWAP", + 12, + 13 + ], + [ + "SIGNED_SWAP", + 14, + 15 + ], + [ + "SIGNED_SWAP", + 16, + 17 + ], + [ + "SIGNED_SWAP", + 18, + 19 + ], + [ + "SIGNED_SWAP", + 20, + 21 + ], + [ + "SIGNED_SWAP", + 22, + 23 + ], + [ + "SIGNED_SWAP", + 24, + 25 + ], + [ + "SIGNED_SWAP", + 26, + 27 + ], + [ + "SIGNED_SWAP", + 28, + 29 + ], + [ + "SIGNED_SWAP", + 30, + 31 + ] + ], + "prefix_pairs": 7, + "wrapper_sites": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + 31 + ] +} diff --git a/research/p104-productive-controller/PROOF.md b/research/p104-productive-controller/PROOF.md new file mode 100644 index 0000000000..e0bb34fbef --- /dev/null +++ b/research/p104-productive-controller/PROOF.md @@ -0,0 +1,212 @@ +# Productive P104 caller and complete conditional cost + +This construction gives conditional `kappa = 304057/100000000 = 0.00304057`. +It changes the complete recursive profile. It does not change the selected +record. The five retained framework assumptions are native all-column +implementation, owned erasure, the uniform compiler, precision and tape cost, +and analytic recovery. This package checks the new finite interfaces and +all parameters of that conditional calculation. It does not claim an +unconditional integer multiplication theorem. + +## 1. The complete source word + +Use Gareth Davidson's PR2305 composition of David Arias's PR2152 coalesced +P104 word and Cinna Davis's PR2219 private reuse. `local.construct()` rebuilds +that exact word from its archived source and compares the full report with +PR2305. It does not run or reuse the old owner-price model. `WORD.json.gz` +contains the emitted word, all binary frames, all public boundaries and the +104 retained port indices. It has 25,311 events and 735 independent public +inputs. The 208 live main fields are X_r and Y_r for the 104 retained indices. +All other public fields are independent helpers, including the 16 punctured +main roles. Eight distinct owned lifetime labels can use one physical slot. + +At each frame V let Phi_V be the pinned nine-axis native chart. A register +in frame V contains Phi_V times its logical value. A MOVE applies +Phi_new Phi_old^(-1). Each ADD or SCALE uses the same frame on every operand. +COPY reads into a cleared owned field; each final private CLEAR uses the +retained owned-erasure contract. The exact endpoint is + +```text +X_r -> X_r +Y_r -> Y_r + X_r for every retained port r +h -> h for every one of the 527 helpers +owned -> 0 for all eight owned lifetime labels +``` + +The first interpreter checks this matrix on all 743 public and owned rows, +including arbitrary owned entrance values before initialization. A separate +interpreter applies the transposed instruction matrices in reverse order. +It uses dense integer rows with binary denominators. Both checks cover all +552,049 coefficients, including zeros. The private slot is initialized before +use and is cleared after use; its peak occupancy is one. It receives no +productive credit. The source word, correction and reuse are predecessor +results, not new local circuits. + +For each positive width f replace every chart by its factorwise tensor power. +Every common-chart scalar step still acts on the same logical values, with +its scalar coefficient outside the tensor power. The frame induction and +rational endpoint therefore hold at every f. Native phase checks include the +absolute scalar phase. Equality of an unsigned tableau alone is not used. +The pinned compiler produces each native recipe; a separate Gaussian +interpreter checks every Pauli image and the global phase. This establishes +the ideal linear identities. The retained all-column implementation and +rounded arithmetic hypotheses remain explicit. + +## 2. The local productive interface + +All public paths are nested. For each helper h, the complete boundary map +Phi_final Phi_initial^(-1) has Gaussian rank +`dim(final) - dim(initial)`. Native lowering checks this rank and supplies +its two monomial boundary maps. These maps give independent ordinary +Gaussian targets at these ranks: + +```text +helpers = {4:51, 5:36, 7:24, 8:122, 9:294} +paid = {1:2429, 2:557, 3:389, 4:112, 5:108, 6:16, 7:13, 9:1} +``` + +There are 527 helper targets and 3,625 paid calls. The paid rank mass is +5,894. Helper rank mass is 4,174. The main boundary progress is +`2*104*8 = 1664`, leaving 56 paid private-copy ranks. The unused helper 711 +keeps its paid H9 and its productive H9; they cancel in the moment. It is +not silently removed from one side of the calculation. + +The 2,981 distinct native maps include every paid occurrence and every helper +boundary. The 208 intrinsic main adapters have rank zero. Their phases give +these physical maps on port q: + +```math +Q_q=\frac{1+i}{2}I+\frac{1-i}{2}X_q,\qquad +F_s=D_s\begin{pmatrix}1&0\\Q_q^{-1}&1\end{pmatrix}. +``` + +At stage zero, `D_0=H9 Q_q^(-1)`. At later stages D_s acts on eight fresh +axes. The complete source accepts arbitrary main fields and arbitrary helper +fields, so this is a full interface, not a main-input subspace restriction. +Each full call uses a fresh independent helper inventory. + +## 3. A forward source supplies both caller orientations + +Retain Cinna Davis's literal p16/a7 controller from `joint-helper-lattice`. +Its 18 full sites formerly used two forward and sixteen backward interfaces. +Use the inverse of the direct wrapper in Ali Romman's PR5398. Put + +```math +R=\begin{pmatrix}0&1\\-Q^{-2}&0\end{pmatrix},\quad +B_s=R^{-1}F_sR + =D_s\begin{pmatrix}1&-Q\\0&1\end{pmatrix}. +``` + +For each backward site, the emitted execution order is + +```text +x <- Q^-2 x +(x,y) <- (y,-x) +execute the unchanged complete forward supplier +y <- Q^2 y +(x,y) <- (-y,x) +``` + +All 18 +full invocations now use the published forward word. No instruction-level +transpose of its COPY or CLEAR operations is needed. The wrapper acts only +on the two main fields; every helper and owned exit remains the source exit. + +Exact Gaussian arithmetic gives `Q^2=Q^-2=X_q`, with phase +1. It is a native +address translation, at every positive tensor width. Scalar minus signs stay +outside tensor substitution. D_s commutes with Q. Thus both signed exchanges +and both translations are ordinary operations. They add no Gaussian call. +The full Laurent replay retains Q as a formal invertible variable; it does +not impose Q^2=I to prove the caller identity. + +The physical check binds all 104 ports at all 18 full sites. It checks the +orthogonal route, inverse route, fixed central direction, four boundary +contacts and exact cross term. This gives 7,488 boundary contacts in the +265-axis layout. The 53,248 central-square column checks cover all nine-axis +columns at every port. Each route changes at most 17 axes. The phase check +also binds all 3,328 main targets and every whole idle job. If an idle includes +stage zero, its first eight axes are the actual orthonormal basis of +q-perpendicular; the residual translation is charged as ordinary work. +Unused fresh axes are spectators and can be deleted by an injective relabeling. + +The 15 thin queries keep the existing paid implementation: initialize an +owned field, COPY the source, perform Q or Q^-1, ADD to the target, and erase +the owned field. There is one paid rank-one call per port and no target +credit for that field. Q^-1 uses a positive Gaussian and its translation. +The one physical owned slot is reused sequentially by full and thin calls. + +## 4. The complete invoice + +For each full site add the local paid and helper profiles. For each thin +site add 104 H1 calls. For each idle with j stages add 208 H(8j) calls. +Each main Laurent diagonal gives 104 targets of rank `1+8j`. +A separate count from the two path lengths 7 and 8 gives the same invoice. +The resulting complete counts are + +```text +paid calls: 69930 +productive fields: 12814 = 18*527 + 32*104 +thin paid calls: 1560 +whole idle jobs: 3120 +rank mass surplus: 760 +maximum target: 145 +maximum paid rank: 72 +``` + +`RESULT.json` gives both full histograms. Every helper boundary and main target +has a native map. All COPY paths, source correction, cleanup, thin calls and +whole idles are included. The old fixed-window owner assignment is not used. +The retained mixed-target theorem supplies the productive matching and +uniform recursion from this complete field interface. No new helper output +is treated as free work without its corresponding paid path. + +Two rational interval engines check `sum(T_r*r^(1-k)) - sum(P_r*r^(1-k))`. +A sign-changing crossing is enclosed in +`(0.00304057807630, 0.00304057807631)`. This is a bound for the stated profile, +not an optimum over local words or controllers. The tested saving is +0.003040575. The claimed kappa 0.00304057 leaves more than 8.0763e-9 to this +crossing and improves selected 0.003027288235 by 0.000013281765. + +The complete tail calculation uses power 1024, cutoff 17, target floor 18, +offset 1/5, and reserve 1e-10. The paid ratio is less than +0.999999996781291. The higher-moment ratio is less than 0.965182173 and the +completion ratio is less than 0.963354733. Both tail ratios are below 0.97; +`0.97^128 < 1/16`. Splitting and rounding give the strict normalized bound +`5242880004882813/5242880536870912 < 1`. The old cutoff 20 fails for this +larger helper inventory and is rejected by a control. + +With complement factor 63/64 and logarithm power 1000, the compiler uses +`H=64215200000000` and `N=2^H`. The integer test exponent is 45,868; +`(H+1)^1000 < 2^45868`, and the preceding grid point fails. The arithmetic +checks all 54 strict outer predicates and four functional predicates. +The retained ordinary BIT saving is 0.0034, above the new complex requirement. +No stronger BIT result is needed. The uniform compiler word is specified by +the retained finite algorithm and is not materialized. + +## 5. Ordinary work, storage and precision boundary + +The source scalar allowance is 217,428 real operations. The route allowance +counts each paid map, both normalizers for every helper, all intrinsic main +adapters, all four fresh-stage contacts per port, and the eight owned +lifetimes. Each fixed map is on at most 17 active axes and has a 1,000-unit +allowance. The sum is below 10^7 per full call. The global raw allowance is +184,647,552, below the funded 10^9 bound. It includes thin COPY/ADD/erase, +scalar boundary programs, all signed exchanges and translations. One owned +field suffices in addition to the independent public fields. No helper +initialization assumes its arbitrary dirt is zero. + +The source checks fewer than 26,000 events and `1+abs(coefficient) < 2^16` +for every scalar update. A safe local scalar growth bound is 2^(16*26000). +Each rank-r tensor Gaussian has row l1 norm at most 2^(rf). The complete +raw implementation therefore has a conservative growth bound +`2^(10^9 + R*f)`, where R is the sum of the full paid ranks in RESULT.json. +Independent local defects can be bounded by the number of raw operations +and paid calls times this factor. These are finite upper bounds, not sharp +or attained norms. They include the intermediate growth in the three-ADD +signed exchange. They provide parameters for the retained precision/tape +contract; a complete rounded integer multiplier is not executed here. + +The claim retains the five framework assumptions stated at the start. +Normal and optimized Python checks, immutable source authentication, failure +controls and a Git-free export are verification of this conditional package. +They are not independent human acceptance or a proof-kernel theorem. diff --git a/research/p104-productive-controller/README.md b/research/p104-productive-controller/README.md new file mode 100644 index 0000000000..09dce91f62 --- /dev/null +++ b/research/p104-productive-controller/README.md @@ -0,0 +1,141 @@ +# Conditional kappa 0.00304057 from a productive P104 caller + +This construction gives **conditional kappa = 304057/100000000 = 0.00304057**. +It improves the selected +[PR #5413](https://github.com/CrocSwap/integer-mult-bounds/pull/5413) +value 0.003027288235 by **0.000013281765**, about **0.439%**. The complete +recursive profile changes. This is not extra precision on the old crossing. +The selected files and other contributors' work stay unchanged. + +The contribution binds the completed P104 word from +[PR #2305](https://github.com/CrocSwap/integer-mult-bounds/pull/2305) +to the current mixed-target recursion. Its 527 independent helper outputs +receive their actual Gaussian target ranks. An explicit caller uses that +published forward word at all 18 full sites. Signed exchanges and central-square +translations supply the sixteen backward interfaces. The word's COPY and +CLEAR operations do not need an instruction-level transpose. + +Read [the proof and full cost boundary](PROOF.md), +[the complete receipt](RESULT.json), [the emitted local word](WORD.json.gz), +[the emitted caller](CONTROLLER.json), and [exact source pins](SOURCES.json). +The source circuit and private reuse are credited predecessor results. +The new result is their physical caller and complete productive admission. + +| Verified quantity | Result | +| --- | ---: | +| Independent local public inputs | 735 | +| Productive helpers per full call | 527 | +| Owned lifetimes / peak owned fields | 8 / 1 | +| Full calls / thin calls / whole idle jobs | 18 / 15 / 3,120 | +| Complete paid calls / productive fields | 69,930 / 12,814 | +| Complete rank-mass surplus | 760 | +| Native paid and helper maps / main adapters | 2,981 / 208 | +| Physical caller boundary contacts | 7,488 | +| Crossing enclosure | (0.00304057807630, 0.00304057807631) | +| Tested saving | 0.003040575 | +| Claimed complete kappa | 0.00304057 | + +The proof checks both complete matrices with different arithmetic and +chronology, exact native phases, each helper boundary, all main targets and +whole idles, every owned lifetime, and all scalar and route charges. Two +rational interval engines check the moment. Cutoff 17 and floor 18 fund the +completion tails; the old cutoff 20 fails. The finite compiler threshold is +`N = 2^64215200000000`. All 54 strict outer inequalities and four functional +inequalities pass with the retained ordinary BIT saving 0.0034. + +## Reproduce + +Use Python 3.12 and the standard library, from the repository root: + +```sh +python3 -B scripts/research_package.py --package research/p104-productive-controller --check-only +python3 -B scripts/research_package.py --package research/p104-productive-controller +``` + +The registered hook runs the full verifier normally and with `-O`. Its final +marker is: + +```text +PASS_P104_PRODUCTIVE_COMPLETE_KAPPA_00304057 +``` + +Direct replay needs no Git, network or optimizer: + +```sh +python3 -I -B research/p104-productive-controller/verify.py +python3 -I -O -B research/p104-productive-controller/verify.py +``` + +The source archive is read and authenticated, then copied to temporary +storage for reconstruction. Normal replay does not write artifacts. The +explicit `--write` mode rebuilds the three local artifacts. Controls reject a +missing COPY, a wrong frame, a wrong native phase, an omitted central +translation, unearned helper credit, the old cutoff, and insufficient BIT +stock. The compiler grid check rejects its preceding integer point. + +## Scope and coordination + +The scientific base is canonical main +`32890bc5de034ab8fc93ac88ead7279a6a416d04`, priority revision 7. The +[canonical claim](https://github.com/CrocSwap/integer-mult-bounds/discussions/5125#discussioncomment-19154639) +records this changed cost model. The +[source handoff](https://github.com/CrocSwap/integer-mult-bounds/discussions/2299) +released the old composition scope and left global binding open. The initial +fresh cache covered 401 open PRs and 4,828 Discussion records. This scope does +not take literal-slot P104 repairs, original split-contact charts, global +border grading, the Global120 constructor or the p19 compiler. Full overlap +search is coordination evidence, not a novelty theorem. + +The bound retains the selected framework assumptions: native all-column +implementation, owned erasure, uniform compiler, precision and tape cost, +and analytic recovery. The package supplies ideal uniform frame identities, +finite growth bounds and all new parameter checks. It does not execute the +complete rounded multiplier, materialize the enormous uniform compiler word, +provide a proof-kernel theorem, or claim independent human acceptance. +No fixed-profile or global optimality claim is made. + +## Sources and credit + +- **Gareth Davidson**, verified as `bitplane` in the retained source notice, + supplied [PR #2305](https://github.com/CrocSwap/integer-mult-bounds/pull/2305), + mathematical head `335e78619a17b7c418e11306f86a72fd366de35b`: the exact + [composition](https://github.com/CrocSwap/integer-mult-bounds/blob/335e78619a17b7c418e11306f86a72fd366de35b/research/p104-coalesced-private-reuse/compose.py) + and its complete local boundary. Its old owner-window price is not reused. +- **David Arias** supplied the coalesced 735-register word in + [PR #2152](https://github.com/CrocSwap/integer-mult-bounds/pull/2152), + head `05f7aad0f08992ee48ec2dd93e896d9a4567847d`. The source archive retains + the original code, README and attribution unchanged. +- **Cinna Davis** supplied the private-query reuse in + [PR #2219](https://github.com/CrocSwap/integer-mult-bounds/pull/2219) + and the productive controller lineage. The pinned + [p16 caller](https://github.com/CrocSwap/integer-mult-bounds/blob/32890bc5de034ab8fc93ac88ead7279a6a416d04/research/joint-helper-lattice/CONTROLLER.json) + supplies the finite path and boundary matrices. +- **Ali Romman** supplied the direct conjugation identity in + [PR #5398](https://github.com/CrocSwap/integer-mult-bounds/pull/5398). + This package uses its inverse to admit only forward invocations. +- **Jacob Alan Sussman** supplied the mixed-target recursion lineage in + [PR #4268](https://github.com/CrocSwap/integer-mult-bounds/pull/4268). + **zxv** supplied the retained higher-moment/compiler and outer machinery; + **Cao Yifan** supplied the source pricing lineage. Their exact interval + engines and outer ledger stay unchanged. +- The P104 lineage retains **Rohan Arun**'s scalar channel, **Chafik Boukhalfa**'s + native binding, **Adam Gall**'s schedule, **Josie Elliston** and **Ali Romman**'s + geometry/decoder work, **icekylinx**'s frame compiler, and the PR1042/PR1094 + scalar architecture. The unchanged source archive and + [native notices](https://github.com/CrocSwap/integer-mult-bounds/tree/32890bc5de034ab8fc93ac88ead7279a6a416d04/research/p104-native-channel/notices) + retain their earlier contributors and licenses. + +New caller, productive binding, independent replay, full cost and package: +Ali Romman with substantial OpenAI Codex assistance. No subagents. Apache-2.0. + +## Open next questions + +Can the P104 local word reduce its paid profile under productive accounting? +Its original coalescing optimized a different owner model. Start from the +emitted word, check active claims, preserve every independent boundary, and +compare a fully paid change against this complete invoice. + +Can an independent review confirm this changed complete admission? The first +step is the registered cold replay, followed by review of the forward wrapper, +helper normalizers and compiler. [TASK.json](TASK.json) records these questions +and their current limits. Neither question reserves work in another chat. diff --git a/research/p104-productive-controller/RESULT.json b/research/p104-productive-controller/RESULT.json new file mode 100644 index 0000000000..5637130d4a --- /dev/null +++ b/research/p104-productive-controller/RESULT.json @@ -0,0 +1,315 @@ +{ + "complete_cost": { + "compiler": { + "H": 64215200000000, + "N": "2^64215200000000", + "eta": { + "lower": "0.000000185845792706621973271570", + "upper": "0.000000185845792706621973271571" + }, + "gap": "1/1400000000", + "integer_test_exponent": 45868, + "logarithm_power": 1000, + "theta": "63/64", + "uniform_saving": "1064201/350000000", + "word_materialized": false + }, + "full_forward_calls": 18, + "gain": "2656353/200000000000", + "kappa": "304057/100000000", + "kappa_decimal": ".00304057", + "margin_at_previous": { + "lower": "3.300756773058285958096643251393", + "upper": "3.300756773058285958096643251394" + }, + "negative_controls": { + "old_BIT": "Rejected by outer inequalities", + "old_cutoff": "Rejected by completion-tail ratio greater than one" + }, + "nonrecursive": { + "fixed_scalar_growth_bound": "At most 2^(16*26000) before native factors; a declared constant, not an attained norm.", + "local_routes": 5335000, + "local_scalar": 217428, + "peak_owned_fields": 1, + "raw_budget": 1000000000, + "raw_scalar_upper": 184647552, + "tensor_native_growth_bound": "Each rank-r Gaussian has row l1 norm at most 2^(rf); sum of local ranks is 5894." + }, + "ordinary_BIT": { + "admitted": "17/5000", + "after_cover": "69/20000", + "atom": "1/250", + "before_cover": "3459/1000000", + "ordinary_saving": "8590884599/2500000000000", + "prime_rule": "odd q > 2^26*N^5 avoiding all fixed denominators and rank witnesses" + }, + "outer": { + "functional_checks": { + "actual_new_BIT_stock_sublinear": "348599999253/350000000000", + "fixed_halo_explicit_metadata_branch": "26950000001/350000000", + "new_BIT_row_stock_sublinear_in_active_group": "1395799997009/1400000000000", + "new_semantic_group_guard": "3/1400000000" + }, + "margins": { + "boundary_algebraic_matrix": "5959522795743199/1960000000000000000", + "fused_gaussian": "5959522787229597/1960000000000000000", + "global_coordinate_router": "2128401/700000000", + "group_bit_router": "2979762093614797/980000000000000000", + "group_scans": "699999999/700000000", + "main_transform": "5959521395743199/1960000000000000000", + "microbox_face_corrections": "26950000001/350000000", + "polynomial_products": "1399999999/1400000000", + "sparse_union_movement": "802209522795743199/1960000000000000000" + }, + "parameters": { + "a": "2128401/700000000", + "b": "4256803/1400000000", + "beta": "1399999997/1400000000", + "bit_saving": "17/5000", + "cap_xi": "1782209521395743199/1960000000000000000", + "complex_uniform_saving": "1064201/350000000", + "d": "1/1400000000", + "epsilon": "1399999999/1400000000", + "kappa": "304057/100000000", + "lambda_": "398783771/400000000", + "lambda_prime": "1395743199/1400000000", + "layout": "1/1400000000", + "q": "4256801/1400000000", + "r0": "1/14000000000", + "stop": "1/1400000000", + "tested_saving": "121623/40000000" + }, + "strict_checks": { + "actual_bit_above_effective": "251599/700000000", + "actual_logarithmic_gamma_guard": "1/1400000000", + "actual_logarithmic_group_guard": "177790480704256801/980000000000000000", + "alpha_logarithm_absorption": "1/14000000000", + "boundary_algebraic_matrix_above_kappa": "5595743199/1960000000000000000", + "cap_above_band": "802209521395743199/1960000000000000000", + "cap_below_cell": "177790477204256801/1960000000000000000", + "cap_below_phase_cell_power": "2137790478604256801/1960000000000000000", + "complex_above_effective": "1/1400000000", + "complex_below_one_over_32": "39493197/1400000000", + "complex_endpoint": "1/700000000", + "epsilon_below_one": "1/1400000000", + "epsilon_positive": "1399999999/1400000000", + "fine_prime_halo_umbrella": "7/2", + "fused_gaussian_above_kappa": "5587229597/1960000000000000000", + "gaussian_above_main": "695743199/980000000000000000", + "global_coordinate_router_above_kappa": "1/350000000", + "global_gamma_power_slack": "9/14000000000", + "group_below_dimension": "1/700000000", + "group_bit_router_above_kappa": "3493614797/980000000000000000", + "group_gauge_power_slack": "177790480634256801/980000000000000000", + "group_key_fits_record": "1/700000000", + "group_positive": "1399999997/1400000000", + "group_scans_above_kappa": "1744679/1750000", + "halo_covers_generic_inverse_radius": "5", + "improvement_over_user_baseline": "654799790400418148631/500000000000000000000000", + "lambda_above_internal": "1/2800000000", + "lambda_above_sigma": "3/2800000000", + "lambda_above_tau": "1/2800000000", + "lambda_prime_above_lambda": "1/2800000000", + "lambda_prime_above_leaf": "2795743197/1960000000000000000", + "leaf_saving_above_effective": "1395743197/1960000000000000000", + "main_transform_above_kappa": "4195743199/1960000000000000000", + "membership_arithmetic_fits_record": "1/1400000000", + "microbox_face_corrections_above_kappa": "53897871603/700000000", + "microbox_halo_volume": "110600000003/1400000000", + "new_complex_uniform_saving_above_b": "1/1400000000", + "new_semantic_guard_with_C1_one": "1/1400000000", + "polynomial_products_above_kappa": "1395743201/1400000000", + "positive_layout_slack": "1/1400000000", + "q_below_effective": "1/1400000000", + "q_below_internal": "1/1400000000", + "q_below_leaf": "2795743197/1960000000000000000", + "q_positive": "4256801/1400000000", + "short_record_fallback": "1395743197/1400000000", + "source_axis_superpolynomial": "1/1400000000", + "sparse_union_movement_above_kappa": "796250005595743199/1960000000000000000", + "stop_below_one": "1399999999/1400000000", + "stop_positive": "1/1400000000", + "strassen_integer_power_gap": "1951441519231", + "support_router_span": "3/1400000000", + "theta_positive_polynomial_power": "2", + "union_header_fits_record": "3/1400000000", + "union_tag_work_per_visit_fits_record": "3/1400000000" + } + }, + "paid": { + "1": 45282, + "16": 416, + "2": 10026, + "24": 416, + "3": 7002, + "32": 416, + "4": 2016, + "40": 416, + "48": 416, + "5": 1944, + "56": 416, + "6": 288, + "64": 416, + "7": 234, + "72": 208, + "9": 18 + }, + "paid_calls": 69930, + "previous_selected": "605457647/200000000000", + "productive_fields": 12814, + "query_shears": 15, + "rank_mass_surplus": 760, + "raw_headroom": [ + "80763/10000000000000", + "807631/100000000000000" + ], + "raw_root_interval": [ + "30405780763/10000000000000", + "304057807631/100000000000000" + ], + "relative_gain_percent": "265635300/605457647", + "strictification": { + "alpha": { + "lower": "0.999999996781290806577194629544", + "upper": "0.999999996781290806577194629545" + }, + "cutoff": 17, + "delta": { + "lower": "0.963354732998265185478252854607", + "upper": "0.963354732998265185478252854608" + }, + "floor": 18, + "gamma": { + "lower": "0.965182172149361102612340648898", + "upper": "0.965182172149361102612340648899" + }, + "normalized_paid_upper": "5242880004882813/5242880536870912", + "power": 1024, + "reserve": "1/10000000000", + "tail_offset": "1/5", + "tested": "121623/40000000" + }, + "targets": { + "145": 208, + "17": 416, + "25": 416, + "33": 416, + "4": 918, + "41": 416, + "49": 416, + "5": 648, + "57": 416, + "65": 416, + "7": 432, + "73": 208, + "8": 2196, + "9": 5292 + }, + "whole_idle_jobs": 3120 + }, + "limits": [ + "Conditional on the retained native all-column, owned-erasure, compiler, precision/tape and analytic-recovery framework.", + "The winning uniform compiler word and complete integer multiplier are not materialized.", + "No proof-kernel check or independent human review is claimed." + ], + "local": { + "endpoint_coefficients": 552049, + "helpers": { + "4": 51, + "5": 36, + "7": 24, + "8": 122, + "9": 294 + }, + "owned_lifetimes": 8, + "paid": { + "1": 2429, + "2": 557, + "3": 389, + "4": 112, + "5": 108, + "6": 16, + "7": 13, + "9": 1 + }, + "peak_owned_fields": 1, + "public_inputs": 735, + "real_scalar_allowance": 217428 + }, + "native": { + "distinct_maps": 2981, + "helper_normalizers": 1054, + "helpers": { + "4": 51, + "5": 36, + "7": 24, + "8": 122, + "9": 294 + }, + "main_adapters": 208, + "proof": "Every signed Pauli image and exact global phase; frame induction at every positive tensor width", + "recipe_payload_sha256": "0a12b2a43238496b226b47dd0e790882d03d1b1b66107308ab37dd6ce21a0481", + "wrong_phase_rejected": true + }, + "negative_controls": { + "missing_central_translation": "Rejected by the complete Laurent endpoint", + "omitted_copy": "Rejected by full arbitrary-input endpoint", + "unearned_helper": "Rejected by native helper census", + "wrong_frame": "Rejected by literal source-frame check" + }, + "physical_caller": { + "central_square_columns": 53248, + "full_calls": 18, + "main_targets": { + "145": 208, + "17": 416, + "25": 416, + "33": 416, + "41": 416, + "49": 416, + "57": 416, + "65": 416, + "73": 208 + }, + "new_paid_jobs": 0, + "physical_contacts": 7488, + "ports": 104, + "route_payload_sha256": "7f4f0ca768ffbc4f93dcff575592c4c67411f46b4289e45b73f715a2ad47b142", + "tensor_rule": "Factorwise native maps; scalar signs stay outside the tensor power.", + "whole_idle_jobs": { + "16": 416, + "24": 416, + "32": 416, + "40": 416, + "48": 416, + "56": 416, + "64": 416, + "72": 208 + }, + "wrapper_sites": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + 31 + ] + }, + "separate_columns": { + "arithmetic": "Dense integer rows with binary denominators; reverse chronology", + "coefficients": 552049, + "columns": 743 + }, + "source_inputs_authenticated": 16, + "status": "PASS_P104_PRODUCTIVE_COMPLETE_KAPPA_00304057" +} diff --git a/research/p104-productive-controller/SOURCES.json b/research/p104-productive-controller/SOURCES.json new file mode 100644 index 0000000000..ee8f34a8af --- /dev/null +++ b/research/p104-productive-controller/SOURCES.json @@ -0,0 +1,156 @@ +{ + "schema_version": 1, + "base_commit": "32890bc5de034ab8fc93ac88ead7279a6a416d04", + "files": [ + { + "path": "research/p104-coalesced-private-reuse/compose.py", + "usage": "input", + "git_blob": "402e0ff402bc9822288e1bf069f0b5712069c11e", + "sha256": "9ac1c0e5ac26ed98976148ef9fd73ee58533533f9581c701deaf26ced899ae9e" + }, + { + "path": "research/p104-coalesced-private-reuse/predecessor2152.tar.gz", + "usage": "input", + "git_blob": "cc1a5cb5735ee489388004c27b709a825faf59d1", + "sha256": "67867369c99212184c13d75369811ea928c89dca0e004287a9dcf0b2c93bcdb8" + }, + { + "path": "research/complex-block-rank-optimum/inputs/selected.json.gz", + "usage": "input", + "git_blob": "5f9ef680983b0b63a4c82a4ed909837b78e690cd", + "sha256": "16bc0ebb04b4be6c0ade74badc6a0c0cdba4215eda86e4ff9f13abf8ecebd219" + }, + { + "path": "research/frame-sa504/inputs/hamming/PROTOTYPE.json", + "usage": "input", + "git_blob": "9efe30ee107b9c67f15f1c726e1a1cb5cef03929", + "sha256": "327d2a868043e846381aa58a33053c24425e8cad522ff401b10ec8af1d649a3f" + }, + { + "path": "research/p104-native-channel/inputs/P104-FIXTURE.json", + "usage": "input", + "git_blob": "2e16f99b295bb386fd13bd8fbd57b42ef54143a9", + "sha256": "516c06f6ec3cb84be588c546108de897650288576dd5fbf5fe44b9c5546ad8a4" + }, + { + "path": "research/p104-native-channel/vendor/clifford_exact.py", + "usage": "input", + "git_blob": "166841a037f069249f6f7f6dedb89248812f59e2", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962" + }, + { + "path": "research/p104-native-channel/vendor/native_verify.py", + "usage": "input", + "git_blob": "2c209dfa9cfade3bc20ac5fc9d876b433a147f8c", + "sha256": "3049471905b47b385c88378a1a3be7a18b8858aadd035b8a6da2f4a03b470f38" + }, + { + "path": "research/kappa-0023-productive-jobs/dependencies/kappa-next-regime/direct-decoder/sources/DATA-PHASES.json", + "usage": "input", + "git_blob": "d9a4f84211182ca200c081ea061d724c8a2cfb70", + "sha256": "c5916ff312678f12aba403847643fbbc29f643acec60bdf836fa56cd3e8251fa" + }, + { + "path": "research/joint-helper-lattice/CONTROLLER.json", + "usage": "input", + "git_blob": "49a2f0675819f9deeea27ed77be2c2b6ff2e87e5", + "sha256": "1f5d6aa267e4e66048818714b5d3b5eae17a58abe91d15deeaa34574f7391a5f" + }, + { + "path": "research/higher-moment-strictification/verify.py", + "usage": "input", + "git_blob": "4b24a5096154736ce060474eb8c72dc64c303699", + "sha256": "0ce7e7137422d5ffeda22085c81fa88471bbe963100fdad62e659f1e3bf89326" + }, + { + "path": "research/kappa-rebuild/architecture/mixed_target_probe.py", + "usage": "input", + "git_blob": "4fc05ab08138218ba9f09e5c89b649afae7c914e", + "sha256": "011c3c9d0cf81103dc84d709a0e36793eb7c5ae3f23c85eac27650ef13afa04a" + }, + { + "path": "research/pr4359-p7-padding/dependencies/compiler-refill/endpoint.py", + "usage": "input", + "git_blob": "340e1f0ffb8a1a9c38fbbd9119580b6d23e01b59", + "sha256": "d097e55f06c3f244f2074ffd7c1a0a5f3c4b4b6a6accf9619d1dde5c0ae85e15" + }, + { + "path": "research/query-thinned-controllers/RESULT.json", + "usage": "input", + "git_blob": "e0695152c98d727edfd0d2034b58a1c7e8682c0c", + "sha256": "6ebfc8c0f09166f4834e9d7427410cb31aefff2cd4d4ce588c8e52c9c70e9a0f" + }, + { + "path": "research/pr4359-p7-padding/native_inventory.py", + "usage": "input", + "git_blob": "8d2d96e3998254c2333c43fe47cdfd074cbd811e", + "sha256": "65539acaf45bdfe8c5aee6830f9c9b3d1107c442a60842ef803fdd7688de8f32" + }, + { + "path": "research/p104-coalesced-private-reuse/RESULT.json", + "usage": "input", + "git_blob": "f4cb528c2cc413f34e2ac83c42225c7a1cf11bd3", + "sha256": "580adb3de7037acc6f7e41cc186e8a210463afaa696d57892643d55acd0040c8" + }, + { + "path": "research/p104-coalesced-private-reuse/SOURCES.json", + "usage": "input", + "git_blob": "58f245e194b794b7bacd8ea88f9814d373ed91c3", + "sha256": "232fc3ca3928acc704333def0b8391f94a8e8736ef045c1b5de5b396be37cdc2" + }, + { + "path": "AGENTS.md", + "usage": "provenance", + "git_blob": "fa006ceb6b6b9d6c0e799f210963f4587ecfb162", + "sha256": "fbee67ab9e0ae4629a35fd9dba69c8f7e29e4a15392eb2d0f75d8768ffb65f40" + }, + { + "path": "autoresearch.md", + "usage": "provenance", + "git_blob": "2fe84a7b30b1e26e60ce0ec4775894eb1831c5d6", + "sha256": "d16f0d3bb4d4b213d06c128db6d6460b0fe9ec1ac5a6c1ea1febf1db40e7b60d" + }, + { + "path": "CONTRIBUTING.md", + "usage": "provenance", + "git_blob": "5185786f2ec00f215019fb5777d70979429690a9", + "sha256": "fcd1a8d0e52342a23b8ffa9e905e85ccc539fb084145ef016dfc93cedfb3d924" + }, + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "fc3d4ba105e1f097d0d7d051a308281e86ab1446", + "sha256": "66974efdced4083c00025f97d95d83909a226cdf801edb9301c195c6641f6903" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "f126dd2e2dad2b669e75d1d0d0bd05c600725602", + "sha256": "f7a48bfa2659b88378282a8eee7d9fe52cdf505594124c4d1686b58510fffd72" + }, + { + "path": "research/p104-coalesced-private-reuse/README.md", + "usage": "provenance", + "git_blob": "0ef79bfc5d978b8784b2d66cde113ffaf573c602", + "sha256": "dd1b9f28ee60887fbbecb7355417aa8fb72b697a771e4cdb37034a5710003d60" + }, + { + "path": "research/query-thinned-controllers/PROOF.md", + "usage": "provenance", + "git_blob": "9068f429896112082664455ab00bab083c99d1d8", + "sha256": "5ade59641f2ed70d045d6f60e89db7d979b1d1e9967f3acbe5c56eac81312841" + }, + { + "path": "research/kappa-backward-controller-20261023/README.md", + "usage": "provenance", + "git_blob": "c698f5b3e826b53c066d77fb22c091a5267a44cd", + "sha256": "e67cc6eb8f4bea9b1e83faeab9fb53ab91c427ea2fabd3cb1f746326e4c0b3c3" + }, + { + "path": "research/higher-moment-strictification/README.md", + "usage": "provenance", + "git_blob": "0a736ca89e1eafb73a30e1f2589cc45e6b5f76c3", + "sha256": "ebe80b68ff026ce90f71f274c31744f4c0b36132d15ebb7e39cf2d5df4df270d" + } + ] +} diff --git a/research/p104-productive-controller/TASK.json b/research/p104-productive-controller/TASK.json new file mode 100644 index 0000000000..6a31a94724 --- /dev/null +++ b/research/p104-productive-controller/TASK.json @@ -0,0 +1,153 @@ +{ + "schema_version": 1, + "task_id": "p104-side-correction", + "priority_revision": 7, + "base_commit": "32890bc5de034ab8fc93ac88ead7279a6a416d04", + "original_card": { + "id": "p104-side-correction", + "question": "Can a changed P104 producer/consumer contract escape the scoped slot, chart and completion obstructions with a favorable full bill?", + "starting_points": [ + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "research/p104-literal-slot-defect/README.md", + "research/p104-uniform-commutation-gap/README.md", + "research/p104-uniform-encoding-gap/README.md", + "research/p104-source-chart-shortcut/README.md", + "research/p104-fiber-tag-seam/README.md" + ], + "methods": [ + "Construct one side-correction word at an explicit chronological cut with the needed frames still available.", + "Derive a lower bound on the side correction and hosting costs that decides whether this channel can beat the selected budget." + ], + "acceptance_gate": "An exact arbitrary-input identity, source/target frame availability and restoration at the chosen cut, plus the complete channel+correction+idle/hosting bill or an explicit favorable bound. The native channel alone is not a supplier. A scoped local result may be retained without a complete supplier. Expanding it into further construction rounds requires the family-level budget and obligation gate in research-family-status.md; an optimistic passing relaxation alone is not acceptance.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read the named successor obstructions before extending #2981 static flags. Distinguish literal-slot action, commutation, uniform encoding, source-chart shortcut and fiber-tag seam scopes; none excludes all P104 mechanisms.", + "scope": "Source-binding orientation only; no scientific replay, theorem acceptance or supplier admission. Budget any heavy replay separately." + }, + "first_experiment": "Name one hypothesis changed from these exact interfaces. Write a literal producer-to-consumer timeline and an arbitrary-dirty-input positive/control pair, then charge acquisition, coefficients, completion, hosting and restoration. Stop if the same slot/fiber mismatch persists or the favorable full budget already fails. A scoped independent audit remains useful; another static count is not a new completion.", + "bottleneck_link": "Completing an already realized changed channel tests a concrete construction opportunity, instead of refining the incumbent packing. A positive local result still needs global and all-size admission.", + "allowed_variations": [ + "One correction factorization, one chronological cut, or one explicit hosting obstruction.", + "A changed correction schedule with an updated full bill and native frame contract." + ], + "scope_change_triggers": [ + "Recompiling the already certified low-rank channel without closing a new obligation.", + "Treating a pending ancestor, local histogram or unpriced side correction as an admitted global supplier.", + "Repeating a correction or physical conversion already supplied by a pending follow-up without adding independent coverage or a different unresolved obligation.", + "Repeating the 208-flag static matching or calling a static nested cover a chronological correction program. Independent audit of that certificate is distinct and remains useful.", + "Repeating a static cover, source-chart shortcut or fiber-tag seam without changing the hypothesis responsible for its obstruction." + ], + "overlap_terms": [ + "P104", + "I-G/2", + "side correction", + "native channel", + "1972", + "1991", + "2586", + "endpoint transport", + "physical dual", + "relay composition", + "2981", + "joint unit flags", + "acquisition delivery", + "static nesting", + "4133", + "4136", + "4140", + "4153", + "4154", + "p104-literal-slot-defect", + "p104-uniform-commutation-gap", + "p104-uniform-encoding-gap", + "p104-source-chart-shortcut", + "p104-fiber-tag-seam" + ], + "existing_checks": [ + { + "scope": "PR #4133: literal-slot defect", + "evidence": "research/p104-literal-slot-defect/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "88666f1dee93fbd85b31fd5d6f91a219e111b5f4", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4136: uniform commutation gap", + "evidence": "research/p104-uniform-commutation-gap/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "281ce601a8be9db470de630759179c23e1dfaa88", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4140: uniform encoding gap", + "evidence": "research/p104-uniform-encoding-gap/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "de25c6525aa866962309df5d107b32d55e6e5628", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4153: source-chart shortcut exhausts its optimistic allowance", + "evidence": "research/p104-source-chart-shortcut/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "9123241fea53df77e51ffe30d9aca1625d4bf3a8", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4154: fiber-tag seam mismatch", + "evidence": "research/p104-fiber-tag-seam/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "4ffcdaee5d6255a9cea1fe53a5424435068089d0", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + } + ] + }, + "scope_status": "changed", + "actual_scope": "Bind the completed PR2305 coalesced P104 word to the current productive p16/a7 caller, with all forward invocations, native helper normalization and complete conditional kappa 0.00304057.", + "scope_change_reason": "The old owner-window budget rejected this source. Its exact independent helper outputs can instead use the current mixed-target recursion. This is a changed complete consumer, not another static correction count.", + "bottleneck_link": "https://github.com/CrocSwap/integer-mult-bounds/discussions/5125#discussioncomment-19154639", + "budget_minutes": 240, + "stop_rule": "Finish only after the changed full invoice, native caller, compiler and outer calculation pass, then publish one focused reviewable PR. Do not change the selected frontier.", + "outcome": "completed", + "evidence": "PROOF.md, RESULT.json, WORD.json.gz, CONTROLLER.json; complete normal and optimized replay and Git-free export.", + "author": "Ali Romman", + "ai_assistance": "Substantial OpenAI Codex assistance; no subagents.", + "coordination": { + "claim": "https://github.com/CrocSwap/integer-mult-bounds/discussions/5125#discussioncomment-19154639", + "initial_open_prs": 401, + "initial_discussion_records": 4828, + "initial_refresh_utc": "2026-10-25T08:06:10.867121+00:00", + "source_scope_released": "https://github.com/CrocSwap/integer-mult-bounds/discussions/2299", + "excluded_scopes": [ + "Literal-slot P104 repairs", + "Original split-contact charts", + "Global border grading", + "Global120 constructor", + "p19 compiler" + ] + }, + "open_questions": [ + { + "question": "Can the complete P104 local word reduce its paid profile under productive accounting?", + "why_it_matters": "The current local word was optimized for the earlier fixed owner model.", + "first_step": "Refresh overlap, retain the exact arbitrary-helper boundary, and price a source-bound change against this complete invoice.", + "blocked_by": "No smaller native local word is proved here." + }, + { + "question": "Does an independent full replay confirm the new complete conditional bound?", + "why_it_matters": "Author verification does not provide independent admission.", + "first_step": "Run the registered commands from a clean source export and review the forward wrapper and productive helper interfaces.", + "blocked_by": "Independent maintainer review is pending." + } + ] +} diff --git a/research/p104-productive-controller/VERIFY.json b/research/p104-productive-controller/VERIFY.json new file mode 100644 index 0000000000..672efc1389 --- /dev/null +++ b/research/p104-productive-controller/VERIFY.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/p104-coalesced-private-reuse/compose.py", + "research/p104-coalesced-private-reuse/predecessor2152.tar.gz", + "research/complex-block-rank-optimum/inputs/selected.json.gz", + "research/frame-sa504/inputs/hamming/PROTOTYPE.json", + "research/p104-native-channel/inputs/P104-FIXTURE.json", + "research/p104-native-channel/vendor/clifford_exact.py", + "research/p104-native-channel/vendor/native_verify.py", + "research/kappa-0023-productive-jobs/dependencies/kappa-next-regime/direct-decoder/sources/DATA-PHASES.json", + "research/joint-helper-lattice/CONTROLLER.json", + "research/higher-moment-strictification/verify.py", + "research/kappa-rebuild/architecture/mixed_target_probe.py", + "research/pr4359-p7-padding/dependencies/compiler-refill/endpoint.py", + "research/query-thinned-controllers/RESULT.json", + "research/pr4359-p7-padding/native_inventory.py", + "research/p104-coalesced-private-reuse/RESULT.json", + "research/p104-coalesced-private-reuse/SOURCES.json" + ], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 600, + "checks": "Rebuild the exact P104 source; check all framed rows and reverse integer columns; certify all native calls and productive outputs; replay the physical forward caller, full invoice, two exact moment engines, compiler, ordinary BIT and all outer predicates; reject semantic controls." + }, + { + "argv": [ + "{python}", + "-O", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 600, + "checks": "Rebuild the exact P104 source; check all framed rows and reverse integer columns; certify all native calls and productive outputs; replay the physical forward caller, full invoice, two exact moment engines, compiler, ordinary BIT and all outer predicates; reject semantic controls with assertions disabled." + } + ] +} diff --git a/research/p104-productive-controller/WORD.json.gz b/research/p104-productive-controller/WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..70f954b346dcf5ee27d394f74d0804731deafd86 GIT binary patch literal 107034 zcmZs>1y~$Q+btTL-~@LFZoz{ySa5fDg1ZH`0KpxCyA19Gx8UvscOTqg;7<1bzwi9# z-pjLC^;*4M)!kKHUDITdi0}UXL1UeE$X2_x#bn=WB9(w((52@>jtHE*j*7IU`cV1l zx>Iva3KIc2g5uGmnX2dYqvk}cn=rN&9i6vmDs#!$($a4mhOcXYmqGvQ^S7(6m$i+O z)wli)FlcbY?N@Q0vVeGTLx#_P_ga$If9bIx8?gLn>gSx0oH%CB&OdxgRi8Mf z01+zIa>mGLE3+DI3oB{01&5ENH5BW-66O;tva#LtP>!V+6zbd)8hxNZg?6-d{8lT{ zD>RNXO^FpbW?-rlT5SORlk~J=grCYyVtx)bxDcPVpND=xnr%dVnP+%F`m;hE+nakr zbmEvIJ7D;Q>KY;-0q9=}FWO)r8er(kDHAaBNSOl|dF-1YyM39SAOpX!O_0%k;iI3C zj#r3q9ZsEcSsV7l50_E(=?KnJGJE`GPKmEae7Ka>~uuIOj(4gZSAH5>7!8^t$#q2Y^+7yJjD zhreDFNX0i$n021lo8`&io7NS$IhkSQb|+``(|yudiE|dr(W4Wx9Rg zebe91ak+h1d>MREpN?xD!+Z@mt0ZICen!Wm+ShrKnK+DOAfBr$`SUo~{}rGs%l=f1(qIp8Uz`S5uWrcI(#Nhyvu+^)A;=7@aU%MT1A=rPp0bdjbJZ(s8Ee$2!?6pjIOruNh=lZ=30 zWGmpc-;kKB9emY!v|{5bbbPdT{HF`1`4_w~=E$|gC|U0xsGe5x`P&9*d(2@yWBrry ztwk=voHPAxdzd8jt*&EvI~%b3;p+i+JlBS7MsG_Q@=n1_%bzFT;GVg%HEvB=t94$C zGZeVo?N4Qxt(rf)i{3#e`3I{vP(cb`x7&0FRZO<n*gA!m)h{cUcKR%>iQds$yxjf%K3?pl)0X}L{x3VR4vHcZpPzyw znE_%kwfg%AuNGu_c0ptfbXkC3ybn3PtY@EN4B#ksU@)#8g%KYgMPgoe(L1dvgdR%! z%YpaoKDS@M_2^As^g!g1-?-HvvR^s0L+O5wUv9($c3pM6zrw6o?9T_2 z3f^F{hDO{?1YR0Cf1~@P5cHrvEwZJu(3F`@hUM3rNJF+$DgtBvEqma zI}mDEdA2TrACahIO*M||r_@H|dr zQ_cA5k7r(`AB7lN8Mm9M-M{EH#t{pZ0eO~6@;h%=fEtQfUFXraJ<>eB<2NGM)33Y1 z7&AgbQXuNSn7%=Th(6}R?F((>o~`(;lVHq&e%GS&bmOf=KOLC>#iyFW^#|?OU6w-! z;=`OP|I7NAS(}X*<~O38m%*hi%ygd43-A5rd!vr9WpC=H*jtMi2JFY44vcHO9gFxC zU*nZ86?U*-J%o&kk<>INZOmKM4!?BWtKeoJCEyV7xqCnOs(jlYPyg5zxZ$NoDL z87S`UG&nlWd?R6JQs@EWYSa;&oM+F(ciUqyr0);|c;3{N+R$+Y-^0-NO$HG7-}NYj zb~e8s^&5%?JPYF}`^j%W2Y>#$0EAJoMNN&|S`TTOKO>dv{20g_h*Ogai zq1f5^+pCu!{>n0tdU+83?&RDP5MZ!u94hxlEuQl~2Z_Ye4SzkfhW9ydS0y#*`&f;ah>i^FcY#6;k9i%uD-WBiKJ|D@Kc8G` zNJjHmyO3FyPb-~$Yuh!iBln>AyR;O3KbCiOetT_Sf;$P@*z@&~Y3ck`E1Mn*y|ck` zm$*sf4}K2YiriH1rJUfNKb;NY!w0X=; zIRR_!Dcfmu*M!;{=Pc`8EF;Q*_aOVO+eQ4!$LozdbyuH@*FIV9_SXxstMTi$G4h|0 zIy_zl{IjaD%?9t$Z(49!{I73yON&n&Mk@i5JKNY|n@;P?^||w5r>_=CPKlBt_kb?! zt=q}!*e)$!99Q1r1C@&k*V=D)2a8t3VXde2P&r)H8~(m7bdxgK4)>Q4Nm05`_lpk% zWYq0Au3eX}A@?lpjf$_JNPqvM>yzd^LzWW1E`FLui@;XTiY^7!-1RO&@z@-nelH=r zP`Xot^q_G;D6xQQQ6Wp(r+h&n%fS+YI#GJrw_OXN7~ORo*KqSLp_~c~^_N$Z>(}Rg z=Q@9_D#ek@$1gv{cD~`=(=V(TwIcaRWdmN~URZtKw)#0MlKec11Z@UJ=^}H-tt$IV zdF+~TJhdZENV_8$D%!ka{K5UF<)!^LpQ`qXHViqa z{3=-zUG5AzaOO`IaVjF=82t?4Ps-h93+U~OYM}!c@p3Z1>g<#!HG{oN1pRRDAJ6f? zs=b3`2E@HJt<2H4Cxo51warhm+5%r17mZ?zv*iRfzWb%tnbby}1sln_W9dR<1J$8SJ*F9SJS>+L>vPQ#U(CGQw5%Rym3eFP|n>? z8ganrb#1MTCS*RbiwI=4Uq4(uHRwI|c|Me1oYx7x30`jHytMgV`F9#_ulhfuD$fJl zcKmsVM$JWbZ7kg2f~q@gE}P3*G`AyJIU6?a2Ia(Vub8e5#9uFYV?Bl**Lx>WWxm~a znhLtq+z6_7;>EU>K4p}JM=&ebkz+$KVQw!EwHf(0LEmHe@xEKwcT=}#e!16q!Rd<) zaVAo;4 z=e8x#@en3d#CzY?;1jIQpNITLnI?W~Kmtt~Z_cB{ILz>KhZGL^J`bVv7VS}hNWdLW z>$+5IXnU3}ONk*m?flNY7xq`reD?Pr#XLH$CsvZyKZ2i>g?!%+cJy|>KH39adUy}6 zumFz%e%J5|HTp#NdwVUKZ6DHj?>k@JukTkF*|O}&v}7G5_iQAECS}@*;|J1#$jj*KV3c3hP=vGkND44yMUIc6y>f3yMTUA{TGfSb<)EPUeKT+Js5j0uz zf2z7?9MKmNYJY8@mypIr_Vd>CZjZNcn}{=>_4vRv3P_0W9Tp&ZGC+|St88hgY_G#F zu3d}v?Pf)aSI>!FUCQP49ec)gMlAaH~-%`6M|%=p%?Q zU*NrxW$*S_(g)rCa-=D=vB&;)5m;TNWnQgwZ^e`HB$`rit@mZ-`1*N;Zg+Q1odg$Vsg0PmSDw!D5kD_BA4v=U9!)!qSx24ZuI_W# zcCV81wKrR`!$vV_o2Xc_ASEquuqElXb=%}wT6_)-FA;MB#d+-D;{Kkx&-LWb6WW3r znKPU_fhn#q7afHAD$f=|d-;`fsdJXe`v^nB-?xh4U23O8v22}57xlDy!=WyL-;RP8 z!(`d!S<1I+mFy*&-))TS_2qt>2W>y1UHkSIRLXT zPv3xfFm4F9dY$t9@x<;^y|!dN+m+n#IB8)c3;<@6g)9s*d7`$Q8&8u3-UZX3eHux7 z(Y5!ih5>bCvz#qTkxd##rf!_Cvv&esKU~->F=;^Uwkkp|M>Sp5iC2Fa9C*%Ignu?r zIBohMgws>Lc{?qZ=&(3+ph?Et=HcC3GIx9HV1J#li3*-b>pyPO_X|7l&hEH3AC-A{ zJ*W@gHfWT{&VWu^H|Ozw_<(613SF1Cwjn&V|LEQ(@~#eHZ~NPNtEo$ z_mh70mEp-1|7Hfjw(_#5V^a0EyDs`7iZ|yq*6?-M;q9=wbC;-6^$#^|lE=$b4^|%^ zrOq7zmdL{x>$Q!f7v8$TBA`Kw;*occZ;kn(J`nl!c91~d`tI{@p>2TiU?s}4CPQE1 z>P0-Jl7m^|bqz{R{5ef$MaPkb=b&+C-N%%bB43YlMGYq}`8S=eH_jDMmZS5FIQ_l> zXQN{IEt}av%2k$?)~a73{u!vM97Pj?4V z13QkLZ+GlqYd<0(o4t{9^OMhd3RjwYRYmuEPUESGd#2HT0*yy2YjXhF)vMSjEn=Yr zfs^_Wu!3QxXeTkr`8AE~PY1Homz7Zqujs|?t|NV$pMSW<_6f$9#9zNnT&2S7^PPTR zXTI;H{qS{0@L}H$7M+NSZ7C@WES1+HP4S9#}IjLGQl}%(ru5+(9}z? z(z|)rS%8IX2jSi#_9^=TY@)V;77?{L80mLYJ+#g6&>`BsItJ#a1^CmL;=DPY!CJhP zsvsHwu&H?)L3`$UV)x$1-j6XZmG56Idm~-BR=!oMh&+8W>%`f>A^jnuzTVgCCoyo@ zBGc7+{IF@BG1m69mHv1bd)03tfaN*(3S0n@mMNn7_|F}H`g|t(qBq2x&%^IS+G*D7 z@}KK|8elFl`d-MK8jQZ+mAB|bjT3Yr>H^XDGQ)u+cc9&Qd;WOdEnMZVffgR|41lLli3#@6k{cb+v*)Wa4}*Sc-pkNwTl zD?$ZmAX0`6&iX=kw+nt=*VT1Y?^})6;l}aKoAE_YX@8I+c(k*Q#RVK)Iqgw|&|YiP z>4W&jIV-! zz!vIkUl0no|3`I4r6%d$W{YPXB~{8^G}*}UKHvQ@I^ zK%Zg~cc(4x#d~3o*T%+h^sYl@9Vnp+Cg~d3z5Gnm#lI=hS#ccuWixn#sY8!(V(>8& z@Tz=XdEtRDR`XWuq)bQ!9fu%|g`;Lp=5qsYK;~0wNcApwgD*Xs zNEoaIG^_F3-3;BzxAFG;xtmC?E(qQ@JlQmU`|;;YvBC$fhRmY>K;n&G(765XDdGCw za|-o|PeI2|(M#hUC5Be#9rea^#UyB^^ZJwbGlH*OaOa~R3+o1dkNh0}`MtQ|&V!3- z1E=xIx$Ao6ef^qe^Lo|XCFz@C(EtzsosS`E7v|CY+9>f&^Pfw>7@scWW5p`7wWZb6 z4tKKRr!`$*ff|@Y1b80v>~Guccb5CGwC+=RyzvZFeDJ2dOI)~~7R#Avd@70uaC0?p zubsY)oKM#^7ra>D-QrAwC*YsQ@}Cv%yoxr#XGfh1J$|Xr5z8RUuJf%Wx%@@rK_7FQ zWHPQ>Qf)8-n78Df?ac2k1)%>>TTWyc?v%6AgMQPG)LC;SPBsy&wm&me+5LdICA zo2RSxDCf5a9qv{nbKWD|C)5xeWr!Wt%ma_3&BfS1ffd?`&)AOR54YzbDUCV~l*?_bkF*wp+*Q z^ztX981&g=4t+>N(y zqQ%bu&3_%$-vHHr9mW6kI#zMAd}~s6OHt5q060NiS6Qj3yP%~TT*cfqfRuS(l=*b! zk!||a{_b_G@5JVjaCFPv0PIJ)FQC{PMF(!b0k>a+96QMEyfZtFZDV^NG3d8oBE|^zjc}W=;-@` zwN0KLFDD6Tt;((!W3L`{A756k`-J@KC%Xgz#|IAgvDFLGpq=J}!Fvzz-$E0vg#PN~ z?&aZi0^sNE=i|$*$OM4Ic6P~<{Vk3$E&9(lvdK0!l4Bu-At>{IYTy2w1fo3;`VaPl z8YJGpfS0bfyFP5N3%{#HzZ$Kyut!V4Sc+k1)qh29rhoz$6z7ZxtY z4Mxc~Es26hMa@aW*YmfV*f-DhV?P8>gY3jc?zSM~*H!r&o-OA#=z(g^&6DurVFCE5DX?0EdAvFoW% zy_LSnRh53G1_jYDLyR9uWV^uBzdT zZ7#ZV~zV;vb2P0;91O zl2zj12{6B+2%C4c%J_cQXPS~Mmx5Doh5TjbRlP=lN|vpi_D>$Qa=~Rqs^v~g*atfw z6>8~5GU!Chs@X1aZHA4^#;fsWoEmB@!p|ELvz@HUdrT+E)gl+8=uBZ1b^&?~-@nLe z6+(!|?bc5{EknDOP`-6HL4hgV#o|}$w9#q?>3y+gf7(wb+nE+9O}BC{{W0~b$au}l zNL6{2`6oP-dqNtIIOUUL>0+}}9SJLr-&jp`r6xL}(|II(m0~5RxkUaF2P-XXMrowW z8sp2BLt-{*!?pHs@gp41T)xfXqL+$gnK$ZmC$dk|RrRi_d^K(niYbz=^@O@x-KwW&3%L>|BK_ZG45`jEJ-jFv#g7E@MpLq?Q zKL91aCa*N1h>QA^p1MudvTnzgiY#F$OV#kjTeX~^kkV>`QPD;@v zIlVb(zfz}71Jqcd(xRbM1yV}U=5H`xK(k6~6ytWBt!<;(iR^I%Y)*_v#0dr7NXzE9 z{>n2q0?xY95Y%8_S=eoUp0Yu`(P88>n2D$oo;K~WqRhq7ZvNQuGF})zZCWu(5ZVm4# zwlq@x{*X_RvA)k;=|QB0fLakuXAgL#xLPE?;yzMC<-;vuSgaoZ9lA5cUss&9k|_7h znD9F-t^Q1YDWN5vI}DzC94M?vVZe%ypoI4ZDAw4B+!hFdYDJv;!N!$gr0HI#RTz znNi{A$!~KP_c-D_TE<*!oGlD)ZV7JooB@`ljp-lLEQZ@#e{yrgbOn7p-28Yr^94ig z`D;b1f%;e#s01X1*1PSyJNmOW+*oyuN7D>>azU1$=m>(WLet6g^xU$l={wqV&MS^Diu;?~d z4A(TjRf@Vbu%bA&_g>X(8UJtM*1HICEAKj}>EOKRXbSL0n3s=Y&tKs25n!T%rD>f9 zC4yS5`i!Njhu>8XPZ=ai7azm#_Y@YizDF2(mnA4{fzETq)iBKFs<0gAX+e1+&4)CE z9u^P(-859_nUj2<-F3`7V8deQ+Zdga0}nRWrqW!%kc^SMNtyg+_gv|d(nM)`k$aF_ z%y#?eyORFWDI*-h3K7%>3eJXVQ)e}HRClzQWW}%Lr<<6}~DBYK5qX$0>o?6EOxE2LNo^b}r z@^uxFSZkmey$dm~jrZB&h!p^!?<3Tx{oRQt8FEW$8N|l3Hg`<5)PMyVCrA=WBku4ot428#Yond$7tZwzj z`b5XP4Q=?B74l$X@b4llGj?p*hTx(PLD=$|ZfkRxpAcMrH}Y;T6Fad=5|3d*v>xI# z*WM*(R&~7$hAMd+1l9f?H78beV!32#$wsWNQ6~al7KZEL-{Pup`qM$D-ZVo^sx+k$bj(L( z)TP2fNK`F>;nF1;Tp~RU(0e*rk6-KNy;e z)qGvv(gE^sv(D_NpF*8iD8hU1 z#CVU|=Q9%w1XX9sEv8zEv2GQ-Zsnw_vgwEKCfO4i`{X@DQuSu&Me6jl=~V%$CeX}%GxS4OPJ`s;n#+-!LKBF@f31|N z@2sM=05;ZZ+_oInMeH`e7keRlJL!7bcxyg^?*|a>7@k#Y*s5-TM}4o{p3<$kC-c8e zL<$#QwlJ~+3cCb45VNm6ms<3n;7s{JUoO?06#$!_(>Dqeo=}a9ynSy?6p{RJ_s$aV zCm+FEyjg_&*;~Q{`GOV(6M4tk>fQt6LFz-=WHZs3+QVs@8euAIz7!;DFj^Rig0l_K@Q$9d%{#*LCr=VGf-Q*4h7)06lDTH3_ z_iCo1z>wQ;Swel)b)PQpETj=0{VtvTsb9$Ub|}`yD2pNuC6l?6{~qSd8XWapCr&nA zpjf;xS-3Fy?NxG#;<6^D!ER268>Tl*3vjSPS+&rbH}Epn?!uPxbz)G-w6k0&9U)e( zBF70K<+vbkAui4CsJAKY50O|U1tiTcOSz~=Pu8(H0cYw1xkh}^iL{$znTe_=U(%1f zt%rZxeOe^;M|MyKVWr8!Pm23mf0*}N1pC@|&8KR>Ld9l?6S=j067<`DVvS)oskL3Iq}W{@gu(gCvlOe)P=#>N+^?069>8VJqRy3ae7ky{ zasWx^%;3xEFf?SMpRSqD-N>zG>gSmQH>pE5gQ{r0^1EEig!J(;&VE_7Qr3whM(boh zd0f3R$GV#2j2O$8v$`VD+iuSS(IY9m(SBX1#5iAmLtreURj% zK25&3>G^rt)1{!Vp4C_O4F;Ou`xOQ)nfm@~Ia45-M8@9tmy4ieF@VsI*mo9*i!^Uh zMa{DpQ+eq*kN3`^FHuFBZ{UaU^~kk*!bf-PKXDdN39Zka`jJ;cF#Nbb!Osd?0;^=_ zNRmtNM5(G4Z$A|#zN_C7D>W5@u58(~ZP5t>Wz*ifk{@?}lSdBG_y~Gu(8d&~BF2Ol z_>TXoKh$y#L*H%-y2u_h=h6``wf0_pV)`B9dx07)+HjI|pq@sTFvpM@TB$<(r)40UJiPaExqd#Jtgq-#YER@P~tV9xLbp$QB8^fFx3f_T=K1b7N znu9kdmK9XmspSxUinuI7Al=24C~^(?5xEMXT#EE&6to59Ohh5;6SK#0rfB4>kDU6j zS|ujpn$C(yt|i#BTjnQzpt|QL*))78TskEPml^!iA+2=$z`q@m!J<^MMl?5pU5aP< zEM5>AM3+pf@xRWOjh~|b!5e1SwqKT8>m*+YKyf>+8F`aZPQ=pAEtJ0v=rBGs+ z15T1q%@m8~YLDvf5)zkE@C7*Kt6(Y1Je%di!+adWdOu@H&!bbAhe3Wj-rbp3t5#@E zKv(gpA1j_O`Is}PPbJQWM5<2(qfjDv&M|Iz`UeZMoH3nc608D&G;%x|Rme1UXb{yn zmE&isN^ztDLn0(BW`ql7P8sGa-MhHXcjbiRgjPm!H6*Yy+q0UZy zz#u@c%ti%R2{R@xeI;W@LSD(Fql+K|Eo(<&NiicrE>A$hONY-(hy4$yHl={7**j^p zYC@13YerJg;!>Cxqow%c%hrSg-b>e}p`-&zpJAiJ365AvMCnr>DWsFZY}X0($2TGF zSu>f}bhY+0ue``MNH`s2BGJ_8Vlu6 zSB?m`39S^NM8WZ0G80TgN9|Fh3zJACbI=OcY9me|R?KyWj#sP5($J~OLRX3}LnTe; z3j-K4BO|K=MbJQ{tEal%`g4TBpiDqro(dkJj}tx_UtzDuq231@)=;*LwvGB;wX z!8AbVY+%zHvXJ}L|Y^lzM z)X}mCCN@7^kO_jg(rEx<1PQiCEzCzccO}?8O^dEC*N>F@}ktIF8Hq!q`MA)_b zn?@ofD6fch+BZf**gJRw4JiR%8(#u9G%sY!m2MtE8((Os_W}wx6upMkCoW_Qh6#nt z%=jUf7?mupU@O>}(?=;L6n$v=0@4j3I?29Et+Lr#H8L}khj&oS`i=O@} zcBj5m1M3L3rw{{QmQ0pWLiHIo7(<~aWzm8KzSM@SuqrFYgOB9gRbc(dwS5+0&+;LF z7nwsLB(l;suIUbHc^SdVhAg)-OTmLL`^@!U|B-9S&XEG- z^PYRCXRpE8EQJz&7|v~3*_5$q#2PH%GAiuPIP8q!+_Z-9E!U)ZggxU2aw5tV92#kF z%X5lsz;|<sfp+Mtf~D@4g>qs0YNozitE{jzU>YKH5=b=9-62zV zQY&NOnCUUFg<>)^f<=+@No2Uv%OOEYRK?*;5Q~)oWZy{y2*OJbPfD?blt{7-)2nfi zL!?O|C%B6vG>GT3Q9uIoR+5_x$&oS<;%A;J8+-+Vj1h6Y0Al89u%))C;WCVTN(sQP zRLtTd?7))Pi-}PQ4};IG*L7Q2snJ2msKLls$+|ap5g4Z;jbaWg+;6x{;jQZSUN9A{ zWz<}|$RwKVZhFe=6Ys*SS8w2De2P@rr$nGvprR@bhR@Ukie_1f5oes~VDO@$@lgN6{}mucs5-ehUI~{!j-N(--HB=@?St?B z1fqQ``m%&{>(yhxvLqLhK3uA%cJx)Eu)$vasHqnEYbXvo2eh5|GEmLxE36E=GzaCB zXknIcNoyG~e4jTB%6S@Vt3@wTu{5qsBGU}DLr7Ghu==_>lqq?4=->Ov(f|a7p7d0i z1Y3k_Rw1wnr7|f6@rfFRiK3S40H-3Zw%?(-2nR)*S*v9!&tc4`1-g=b-}1$fxEH}+ zM=<_I_I=tHBNU>nAz&KOItq(X5i&_&O|YYe@n;CUrvE*C6u;FKvQm$koz0Zgr)+OT(g@V4{V^X!ol6Na?=7#2Kn{$>I zmKj=#CBaU>Nb4ucG=Foitj8<;+>52o=biT+ACIBY5%~A%d@LY1_zy}11R;RP|1w1Q z7ZCMd%fFn;$It2!ezeL}vdT614?~3i$`H%{7_*+mqY0Og0y&eDC(z<(GS^!a8*s!? z@wv5rHjurE@7)P>M-_faWoSNtnlYPOxfYh*Op0&7u%dNT5}T@EPgnQyCjCFn&(cS~ zU|S5H)5?vOn*Z^$^o9)qa`TY6Ko)Y^G}A{ovD=z_5r#)}e*Faxx9^xW&}U4rlJicz zgz3D47?SkS5zQBa+ZU73(h#)V)En>lln!}FM$qPR=j42f&`^>dWHLA*QbhAi_+td^K4aF;>Tf2U+u@Hg z5GDI(wX2Dca7sAepyel`33GyxDunNKCn9;L!jQ53kxA?ilu0$7ZL#RMnHocxE5Qg_ z+yXPn2r1gvf$p^{M^=u|#5A_dv8XMhuPC$}raV6h`i|D9SDDbmlfBGnr1R>JD`o9k1sK6~V6qIEQ z^woa=5&q4m=twp~+Mr3QfR4#4Brfi~7x)iE{=*Pq3j=bjywiV85chw5@6RB80*UHwf#&IsPtF?U^eIInnWdUxb#FXhwhFiYuFWigka>a=j)= zi&}*#DfG85%H*BpbX4S=rn^2d-6PF*hUGxY?|4raaV96Ci)_)XZ zvmyC7B(C()C#Bb1ympxHEk1xvW~HB_Map^6`_5Kc*1=Zld}DhvP8zo|g<5nIdx1r0 z=`O+hSKagnM*W8+qL<2-fw2+jUTQC}Djg|cQxY}o@TrG7el|Fqb>N0VH z=KARNZoV8Iib1t_YIY9_ZSw>{eSk3^bsCLbdZpP_YY4hfN&9u}FxEjhvXyffIQw<3WX#z6b!x}RMHH(wYC26x3WnqpWd`Ap zu$c!aG^S)+E^w}OFM>LjU}^fM!A;1_rpG57!rl*7l%6^20i4s--No-16Y}K+;;Avl{X=l zJ96O`x#nji6FB#e%y7y~O{^BQYK*ZGcx12-KWUUq>?Lol+*83z&>2ciFPvD-E@@X`2s)$$)WUavL?>61ruEeUWh|ASQl z?qBasfh~$t9=Pe(BO14(;(N!pJ945XgAZq5-JcOg|F1b?E9j_c>^qC zf(dZ$Xt92%2?04lMOJU}<9QD(b45W{cD7_9oMDAcaqGyg1ns$NF5K4`1$);E1r|pP zAYajTxchWAdD&@r{z&%b&j?yCz2zRk4q;+>oUirkzWl#R@O~71{;A2nd%Bx#U`efF z`-;X`IbnYzKIu-gJnbE%*(5mazJVoPE~wnFjMZKT3OD$3cazzMNuKca=h#!)fpDHn z1u^UlMhfX+2(F1obXZMfV*FRVJBmW1lZM0(6k za?dOob<*Q^M1fhm>b!lt`e!!O)i;KUNa>RvR-*;so)aLX7Z zmqJvlF4TIVzb87xVLeYrC3g5&W*FPD!FUb#Fj z@Z-dau-ju!>AcQag34LQxOA>rEtvGfRBO+)TIl$jrFdpEOR%?a;qO&?W`@4KbzoA*oQmwYObxl`yAuA1pK;MO&SK)*~6Lu&jQLq90SvYDdWl*&INVolG7OiQ6C|5g87J= z_U+5Q6HB*04y9gIH*!%59hC}jC>8dzE#l~p^z8939Su&avTeJ%%EjpcPG15U8^3#n z-Tz7sJ=J`~?}5@W4Wvr&38hr}@XJ)pRjfgzYvd(WmqfY~#ymgd*QRJi!BFlY?oXg0 z$w9K}B5#CvWJ7dC#)esyS19v~C}Xa525IgDc;ZP(BY&zfj3ptHt)c^zmFM`(mD6@o&iEh|`c2aZ|nv4sr_-!G<{h z8Y!BiwjveQ`S3%H{gRnAMfe_frX$4FL1az$F!O`p7@lSD7Bg8L07=lyADhosO(_v) z#w>(WTSQ*t@V8P6b_|sp;krWKic=IHiUYr8hbkWbry6oAN)?^p^GFgnq@Ae`V?;c6 zsuyO8E!$;;B;N@eKU%ZbhnDiCn_T=>3b>jIIeK}3%wfrzTpsN*Y)bp5-*rT>i`aMd z;$6N>;GF2zcH$IS54BJngl6(DXtsp51={=~Y6*qm+Lql}4WF^1I!UC5ui8@ZfK_0{ zEOJKmpj>p!jeg*}7#9cX^{owY5nIA{j&KQxjQ(Ck8OUWf!R7hErtsC5_F8;i!9Ne~ zd%`)lYXL1G&2oGbccB}G4B2l^uO8$4m#M?yW10lO(Op-4%RH3~%pHX&et9&4 ziqTDCRL4y^lA7;BM*1{l`=X4HEk-#flFoG`3?mU0Ei2|}85qtBr`0;*ZbdaM(5^woOt&LKv zBwjiumx&w*J-tThvjc^^mJ$|j>o0-XFSt;I2`07HvWY#+ZNj#1LF_ozCD1SuhBn#A z)(4`?EphIjO0$sly|R(@zN8`R{UIX1g9vJ&3h#=}J=Bb);xA)ntPv%>t&c1e;p$1!*GWx?>C(5A5z$Fb2jf|`o%E)&VZ(5E|S z=?0}@sl6V|LOvc^7o78$e1N5ieMVsTKm=VO#rI<_T#X8iMTz7O`dpk7TpGj392&XZ zdubph(dT?AA_Jq6l(i8fe3ZMIeA& zv?pdj{ek?>v%mxtAklt*2w9y~LfVw1)BAx5V}_$fNo=6zm+r?vETl~1y;#cO^dub~ zQ)COR#$D|LVdTme4Wqr(!FC;0+<~AbTnVGA&R}6w88zGiQG|HD__6}&=uaxTr4&0z z?CMFGSN2uctKqDs*#%oZKh|4hNF-5`6Y=45}?%l3}$obs_8h%#B zO#kWCjU59PbHf!QGNo{`Qzl9lro;rIn8o*aj@~H(<0PqUln=v+c^th%1WvTk^fe^E zo2fs3i6;!F^2H48MD#vOTe${>i_h@;drvIA$AJALNmCOjwHMG+$bBE0;XQj_!aNnu zSIDNKm>EY1O#=W|>;xhWDQwc=O*($+FKul6ViwI*ocYylbuAJBR z!&Rx8FNiaxL9%D6z-U*Q^@a}L6B|VkNy2JBuonrH6pk`BNdL(ovG-f8+{wM$XxcmF zO*v=_Ewr8jqe(a`@6M0~hpcikx-sIcC^E>3#2gy=l1mIbMZi~N8A#HDJ~NCyGyNa# z`K4XDJmh*4?0Oaa|K@MM?ea);M4v_Y9z|N$UpE0 z$qrQbUyPR03)x=k=9n7(2h;yIZ?#l~^y(n~Q{|O7e#KNDP4v<67|P-RI;lE`)OAuf z_kV8_EJmQ$u>5DN^=m`RsgblO!0U(57*E($IA_?22AJKeG#)C2tLk+g|LW=14vPvldQ;1A6JbW3X z!mvuI>+Oap3BJV#Eo~$mMLP|?M(rc_`G~O3jO)2NNAUCilT+AAL0XnVSnF$J5e6NX zYOrWykrIa%5@cf4_`3yS=TMj8pKDfppDypT?XGJf|nk>LoVG%Y<7YrGV@ zXAMI#JlNe~ukl;Ruw2T%A9UjK`!sBwL^EB{8^plmYQhZr~^JCXzc*NDn0RGR(;G+R~U zv}YjT#)-~|7?7vlDb9CN9sUJ;uMZQh2lIb80oyu=DkOc1D{hD@&MZN+D0R=ecMTxK zta)VBlJ0n)V|gF@S&EvdFacF%8XjmCJokO&4FYipq>;Ep5=6gH7A9b-3?l-~zN>MH zG7wO34O4~4q=ZwH z3vB(=Nc?LCHMQN7gAnc^dZPVpJiWnkn{^B;fyH>^-2GdY*=1dLVQN9h6RJ z8UoT$Y6zi)&=HhwK#<-ogx*bP5(EsPBPd`%no1J^kuDttK?MO3M6Bp{!Qb!y{Gazb z=RNN^d-v|lot>S{-r1eIGxsLx!miRj>SpQ8rjeavbxtSnuy?c6zExVO%Pd!Ac1pjB1Isouk*u(N8if$3-WxBp;PA6+uryR(K{uA%fPtOs{er zyJpWOoll` zykD7K%ed|W7Voc8vLNyhy~#zkpuJ%zaih=Qb096$Hy&4kx5TB8uhv?Up@W2z4 z1_t=Co-A-U!!a87FM4c%-_tW=VE_+ILd9z@rhW^=xD-9%=`SoqY8*v z)_JrbKX+JN7ErU?JGd}pqKlCOYzwgRcQvc)bsYy*-8`h*H(y#0GOejd!zUzdFPxu0 ziQQXBr@&u;g{9XNnsKTW)|t?=&ISHoK$$6&<#Z_{g?mGnQ2kwbSis-aLHf8hwfpBw z*y}#7bjaL1=$C`j)-duVM#R2ZcS?yY|F|-pM0Ap?;V2|yy*fR2;Yl+}+7+N}c=ItGjtmxd?*EE(+?cGT z2RRW^JUq$Rz=>qWjZ8A;M!UT8p#wAH4mv%7n#4FQ5pxMsPeDhT$pJ1RB7Z=oiLR0$ z1b)t+R(-wMBa;o1 zpH&pBP9<5D_i@!+UPTY8husraSPjd`)6IJr*?F&QzKkc`_Wfs?I;s!!0nP#L@`1v1 z;$EQCe$mu&Ucu4k{PXC$*+H*Wn{QQP)iz?aPRkTjk0s=?ad`=njg|tGyW?D?8mvkg z%1UkMxN$0H-xi~}{TRb(d>B#2eRQC>L|tL8`2IABbwNseK999pH-iJ7!YQj5M#=)! ztnNY=b*g(`0H3SzrATNpp7AxZ;g41mf-01$Hnh;DhZ*EL)t;EboUt06(bu_X{_2(^ zl0aX3Do1g-vSe93<^Ezdy>DNEVKyp|jACLyCZZmkMT029$=(Xhmt&KzmVP%S>vMmJ z8Xui8qi}j~$xf!=htzcCRM`1ne{#1ej!|)5>ZvGqzkcA~rJ!d8E%&Sf-)xY*OYlpU(;%Qv3@dY`gU_%ZGM7@fEo`*1Nhj zn?;7f6ULfL66g<_#)N9t=4o~c$A=^=z0Kvr)DJ>Gn0*dYQS~=86CMcGP!FY>$N=t{ z=9AU!>@P2>;&eeucC@FuP_7aUK#a-lh&ZPR5V&IKML_Hn>W8%V6G+1wc>_Nj#@1Av z0H!>i&cU&XHtV}e5vCYi<1lmdsB6}Zqw?lO6Ry5p24-wAdsH>7S}*L1g#infY{piw zPP!*Fn-VXbB}3E5S}dJqJvui~I2C9$Su26Yn>@L>e#?n7_slrejOHcsk1vK#LPt&) zSnfpG@f9jgG5Pm7EEzsVE7&dO^152medLRyPxDelS4i*;Q6w8025D^UcNB9`d0*cv zQn17{MsvkLj@Jnl(v@L&6KD^;;I3jui9sW@L9YhkLAF6~=Q_C+y}HHnaU6)G!w6*< z3MjCJ!kkD`dLI7EkwFNTTfV7w{5%9_(fVk6LkwUHSyi&6r{o#BNp zG)(tdZMzt%Vknky(PH@tN=3pqMc=DJXtrpv>)jdy+wq-}gA}-1`&mKw6)imZYb;G) z5)_)la`@&ToQzN`UF@PB(#^>cQb&I%LWytm7EqMgIE3`y=Y4w%vJ3O4NBPf&uzF?V zt~}FyXiZw^W)*fVyPj9_FqQ52W`R3n1y0cl^#qNFpplw`BT9oK-MQzXbrT%Fo<8bq zoBqyRCzvp{^GM8|l=Z9Ux^~`7)D>#fjmS#BdR=+g^k~iFEI(!-Y^l#4)TT_|rtEn+ z&#ZBsWzLD3jT8#8e@0d&a^WzedYu~9of`3@n!4qoOJ)-eP+~@6wu%3(jFkl-nE?qm z#UguNDxOA>2*D1P525<;-u-y#;uG?r19v?G_ZYBrWW$kaT3=9IR8q*Q=F3MQ?t0&R zFhLMUsddD?)q%&JkTG>6d-fu)iK~ySE2UEW)phgqsDza(H%V0ANc?K=Oznqn-HRvB5_=vCa8>bsNccbs zoKCf7&TULF({pQ|_9*2UPr`yym-O64;3M|$a^-mR`@atrV=5|9@Iib~(qc`bX08)g zo?Ov$WAMwYU%y0c8RN1cF29nt+LKWZi{k5)2j!DUrXo*;BFH3 zTi=t!)%?7|&fCVS3u}b~?yB>o`N?v#$8m<&e;M*l=@WxMsTC4prFYJGeUg;ytXFa4 z5cN{06vG(saLFzDT4C1It-FbE4+q8lwx$HVIKy`{`otD}f96a9;`T#y;W;>8U@22V zt-69-+9Ea$d(xOj;xcabv-;bx!l<52U+$+e7->Fa50#O42)5MhZi#-kmJH1q!(w!^ zIs^1#g1-HR;g=93?dzY?mcFqf2@~l+1OmD_h2Eih)~xxZj2}(d8|UhZeRpo?7yKgl z6eZgRE{0v^f#BTvYz6OCjHgVkjNl?{%qSl0;aiDW2Endc?0%WJ!_8UdEQ#rwVpgkb zS$#@nQ^kH~BHGtpi15lsL_aNnql)1u5zCXBmAOZ$;wZKEKBD=!4{X$e7HB}RsY7N{ zESh(wcCKPFF`u8S=V~p=FSC6Gw@$vG&eA9YlErcU(Np6`u}UovZz~uUQ^9+0)`G{V z)?qGf>6L5kb7rc=6&k7t%t?!9vc+8IfFxqAb!f3Y1#N*TrX=zj3ap1DbN~Jrn)F&J zW)euUF_V|BR|byJ6;S2gykXgZZ8))~_b$~=-`c>&yF^`sj+W;mk&4im76mN25HHNF z6QFgf4_oFcQeXk*w_XZcrXs@+xq)EhXCDTHPObOj;*ya^yXZ*N%W>izAe=?7{si=; z?Q5xoD&){6bf6^2Z2}yosNza_b1GCqFKF)@q^bxr^_adnAZlagky)mR*1%N5LQvE5 z%~)o+9{se2 zjHJZXs@UY&HN;P8%!kzH$@!Ni0dofA6^(6+9x0yxxeY-VaH=O@?scZ3UQ)&o)o62O z1slK0`40&6_Hzy> z%4?ua{5{~uoqh;-aZxYvAqFF?8WDB(RXzxQTo&A37JMZz6UaP+Wj@OP7K&)TvVINB zJO~8xzl9gFfv*F(XRzEeKn|o&BY^j$717c9&WRd?1>s;N<-i6TsCm5m$GgBszGWiL z5;9l=87zGnjibWS%0Y^P+HURLJBETWA9UWS#!uGb=%i^ZJy3U1_Z;^?st2`HAv=y!ls8SY4^qroK zYv5;JWrbf?{ZDga+z<;(wE9`Sm2Y&3lS{SCPfKTg?oAfT*mkVSb7$Q*Q+JsctX@Tj z7H(12O&)aZiZPwejmJPi6=*h8sc>%aTN1K?ra%zaBXRxSlcBi|U7m5K@cq<_)iZ{gp%tQl5J;Ob>8`kP3#_$6yr|D#n)c`h${$Aws*$d8 zxFMpL%Xrqd$LfDH?E{L^P|HJP=792=(l(Bva|Z7)KP?HV&T60c$Jq#JrSUrG)IaJ< zyLv3%&sk<5>Rt0GT-C5LiKA`rIFwu5+5l3R4S(hxmq&MR3Y7`X+o=+u{&B!s@UEhpjs0AC74hDZeY@;wt2sc0!uvxCPNF#&=Xy0;HsXfif+ymF&BWV=Yyn zFB3jU^oH7&_^8lYi|How<_9%V0lpft!E;H)L}1H6MQ)08-qZ-j`PxFK>Y_7_vO}+# zqJl2hOZ=fHYEphutx-m$@fIVfP=%f*VQ7(w8Cd<~l}^xU?wT`{*NDqj%lU)poKh&9 zvxFU8h)r5&xw@`k_ipfod4ut{=j$dI^Q8Oegw9x%Nw=TcK4h{D1H1$_m$5*co|j}x z&NWWxV7bSH$W}U4F)~l)$WMSM=P?mF(-`Tg)|HhxTf-TaZ2_W{(Dii_$^Pi-YBpB$ zT|~8_Sb1W)y40!3bYjHW#1PFI3^Xn@$3)iq-T$W}!3C8qX+ZVlQv>XG<-%C0D} zdb0c;8;5UMSQse@E7c#b>y!&1fUu+bt{LVwASPuj%Kk7)%szICOW?fz#|7Go3-6ke2hdeJhgvW&N&|)>Az>r<2Xr!sX#9 z@l$L;_<312j8>nXZSg`Xa!wMN2)wkx zGmgjrr6ep>va8uNos*kC$+LYEbzm&@vy6ObHTb(4d&7ouPHyf9opy}QKC~MDU0r-Z z<-<3!RdTDIRGzbz-w%20T9LEQ+OM-4txrRHDm{*qbx$Rbfb!q`KZXB4^1mtnkMe(5 znPwKfu2Ox-A6_#tz+6Y?ZuBz8F_c$H_n#r6A~YLImSp{RLUDdIkB$`Py?%WC8+nVqo)a!R#XvYWx))w1FlWCy$+6XR#CnrB$?f|0HU z1M+r4Mtig`(6x&g`m_p7N&`^A0YAkd;v_9F$c~44N!}ncEXhfHrTT zd+Ptv7fFflILyql?&RpK+H5h%L09sT7CVJ&Rgc7du~~~9xZ$ehL8Sp!jSu2~+b%k3Xbs=nePgH_l^rB4>2P67P&Y8lf)Mw_fwtq_qv6)H!lJq-R;zpYr<<)@O705BQ#&D+ayCk*{iR2?Rz+@e!7F=*U zYZ^#G?awn8-y%K+mth|r)p5D9eo8I$mQdUCzbyc0!o$U}^H3`%IkN%5>IR!ujVaL)RetG=q#DdJJ zx6i%}#5CyQyy=D%@>7rAuzDV`_v=e&1C^FdGo}=t4)fr3lYWmNN#3^*ex3_1xF54D zg{(h)2g-z&ezsiJ%>6>rx^#a1;Zq=X=QE4(2WhMT>WsvYh4|pz+ZQY+K7O~87(ygY zFxq{6e!2n8tg6r)=B}L*G@8JMV1{S~8nQr!1j1bEEHJ~NEikkL_U&8`)zQ4%lQMpZ z8CcW69zB7C21D_;z$B5R=;054SvdyxqXar?xx$E7Th5H(026R$?ZZ9A#E%o0b+&x{ zhz1Ca3XS}r9Ds3^HA6drm%9JGpt;5e_|^)%VRvY|4^jE^MyTT8ltoyJE1a9IN4ACZYDBr>5)#l{lW zb*GqK-io$If2Zb^JY#62%%IL_hEaG1yD57FzPK0b6vk*e2z)vj2x21y!aTSSx=ZJp$OF%OCU50PfE@!#wU z)++?FF+z5Q^%GN!4QS;va?L9#_~&m8V;G1Gagq%-->JP_ghaTRra0>RA~}#cG9Kd8 zfLSs!u6YjakXSLoj<<8G|4dtfP@sT?>c#9_RUEs=Z5ROaCKGi=AMJzFBUMuZ z62CiOw@fVu^xZh2idOQ?G~#Czn!7X3|4tK;+zCC)rv5olIP~3$`ucEhP!}rvOM9_G=QV^Pr6Mx{6H16I!Y`CsPFDCH3pG6p9m-};Yg(fP zKoS6o4rOxP5+R<96yL)^bX!pua`Rx!;sF-@RCqUzL@l&s@qaU})NT6%Z?jBkRwwgB@Q zF}Y#&?Zox<#Pzkr^?8hgYbnCl!MBXM@gaofvz*ek)4k(^#^dA12`Kz6|ILqN7|cai z0wa~49*zkO#e@bQ=M50vGzo+wm^n;8&vHdOs_KCNs6v&_H^oja?AYfN!;11}w0ZZ2 zb?B0C?x;HKPLS)_Rnpad-1m(5y<^&W(u}RIL9A}g!>>5~s!houoJlTi%UAAPjokQP zDCixUZFULdU~<8rACYlHc&tsD&0=WZUep8IOIB>dWMTX~hiDdKF_Wrjvs)ak9+$%< zWwt;zI^aHk0+CmcqIOI{qv>O@m6F|etY-X2)3r5tT#X+u`tEA9=>Kaz+ zH&{7ZD^Ne8LNFh7_ojt^0hYFzns}R5Sq)UKYK9h2OU$?(*Ke-3T8R&`9%z-tE<)f} zz=CRCx{y+q_A6wT&Ii6@#kREfZbRdbj#DLqk-Jmq4QB2MX`~o;Ii3kKMknhTm#fE_ z1c&yZ84US{NFl;rT^d<&sz@=Ray%<$j6v2jK9^byAm~FgB=8T#?k6Vla@4rhuzD|^ zz2>I>qfoku8$8cMzn!2Tt}mulN-9PVSU|BdxztrBhGO~k1t12{cy~rGU6xXo6tP@A zr3AQW5}M&D2hAA`hdyT7M3pOgndg%%E;^97Ys{>w3&`jdfh{WF?NrkS8UbcyF1^lBfq9m!0G_j`raK;mK{@nFg_{5N2N1t@%jl= z?8>zzg=P?lZ3ovIGxjO`Z|r2G7F$5_ia+Q}n+W}Q8Z@j}%7LsX1TXW9Rws+0$|~L2ZLj5x1hq9r%%FsC@|};R)ol}| zbK*E-C`6XbwRXw#X8-i3YWsPZ!Yr=(I{l-9aY}@iVG4_3tf2)Jr@)`nN-l4&1cZ$g zGnJ@}7oB$rZ&SUcHUug0_vd5&l@^_rjp%M`iG|9e@$jeYy)FtqSiVO@lNOpLMAWps zr3&Zhrv;*yX)=<&sQO;_Eh~CYe^lMw)D1W9$}DaoLQS;A zhgO`*@pi#zye#_m!5Nxd%|~h=8my?F{AKQtC|Hay-!=Eo?i)E|8}@OtY8Qn*xexqc zgE}&fq~0f2cwB_`y_(;#uEcs^8RS{P(kRp%*(WyksS-zKCkaN82SXh7=9h;A7sXe> ztDiG{uO^XX{Np|cQ!hPj?Ge3;mG+P04lxq);jYVN2Cr6=ODIeu!#w8Y<_(y8*ix*N zf1GuQQEJv@WV~|-2|B*3n+b=NO?A<=@z$>9ZA4aRULaCLQ6AK-Y;64!2qbQ{8R5%a1Hz2Bz39JY3Uu$R03xs_60!gV`Oen{}8!^QDBXT2c^ z;?VH)+U?XHpNJq=>=>H9mL+i9el?^ee{De*)wr>fToC^=lt7NvK*e8x zx8R!BWSEh%PvhMTc_EG9(2^^DpZz>;U%I`iv*f%Ze;#@1{EYTeyEOCy@{-U3L=v3E zHzDtWydNr7yluhVFvi|H*iM2vN3~pgHM#vcPPKL=(>KyX@Kr&QTII@G*B^>Kdn_&+ z(~{K`w*UN;74XcDl*3$%WoAjkw3J-eK)X$)lXF|5(%?$Hb-H?7BsV*fXv2K&Aa4M@ zm5H2}UBBhzgFY&STngtzu+muLP7nP05C!;VfxyM?;aNNBH~o*(C*pE9La#@Q&Mvr$ zZYOT8gQXd~rzO{zAf7{p(n~}y`n2c?cZWWE6#}pEflDqAbYP$3aYWI2%(Ju!_V>D0 z

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

NQ6 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 qAXljX*i6tZD9TSMO)kkSOVusTFD*(=)i+eC= 735 and r not in live_owned, 'Owned initialization') + live_owned.add(r) + peak = max(peak, len(live_owned)) + rows[r] = {} + current[r] = e[2] + scalar += 2 + elif op == 'CLEAR': + need(r in live_owned and current[r] == e[2], 'Owned erasure at declared frame') + rows[r] = {} + current[r] = None + live_owned.remove(r) + scalar += 2 + else: + q, f = Q(e[-2]), e[-1] + need(q and current[r] == f, 'Scalar destination and coefficient') + n, d = abs(q.numerator), q.denominator + need(d & (d-1) == 0, 'Dyadic scalar coefficient') + need(abs(q)+1 < 2**16, 'Fixed scalar growth bound') + if op == 'SCALE': + need(n & (n-1) == 0, 'Dyadic unit SCALE') + rows[r] = {k:q*x for k,x in rows[r].items()} + scalar += 2*(abs(n.bit_length()-d.bit_length()) + int(q < 0)) + else: + s = e[2] + need(s != r and 0 <= s < 743 and current[s] == f, 'Common scalar chart') + if op == 'COPY': + need(r in live_owned and not rows[r], 'COPY into cleared owned field') + rows[r] = {k:q*x for k,x in rows[s].items()} + else: + need(op == 'ADD', 'Scalar opcode') + add(rows[r], rows[s], q) + scalar += 2*(3+n.bit_length()-1+n.bit_count()+d.bit_length()-1) + need(not live_owned and peak == 1 and current[:735] == w['final'], 'All public and owned exits') + live = set(w['live']) + for r,row in enumerate(rows): + expected = {r:Q(1)} if r < 735 else {} + if r-112 in live: + expected[r-112] = Q(1) + need(row == expected, 'All 743 public and owned rows') + main = live | {r+112 for r in live} + helpers = Counter(len(w['frames'][w['final'][r]])-len(w['frames'][w['initial'][r]]) for r in range(735) if r not in main) + need(len(live) == len(w['ports']) == 104 and len(main) == 208 and min(helpers) > 0, 'Independent productive inputs') + return {'paid':dict(paid), 'helpers':dict(helpers), 'public_inputs':735, 'owned_lifetimes':8, + 'peak_owned_fields':peak, 'real_scalar_allowance':scalar, 'endpoint_coefficients':743*743} + + +def reverse_columns(w): + """Check the transpose with dense dyadic rows and the reverse chronology.""" + n = 743 + rows = [[int(i == j) for j in range(n)] for i in range(n)] + exponents = [0]*n + for e in reversed(w['program']): + op,r = e[:2] + if op == 'MOVE': + continue + if op in ('INIT','CLEAR'): + rows[r] = [0]*n + exponents[r] = 0 + continue + q = Q(e[-2]) + qe = q.denominator.bit_length()-1 + if op == 'SCALE': + rows[r] = [q.numerator*x for x in rows[r]] + exponents[r] += qe + else: + s = e[2] + level = max(exponents[s], exponents[r]+qe) + a, b = 1 << (level-exponents[s]), q.numerator << (level-exponents[r]-qe) + rows[s] = [a*x+b*y for x,y in zip(rows[s],rows[r])] + exponents[s] = level + if op == 'COPY': + rows[r] = [0]*n + exponents[r] = 0 + r = s + while exponents[r] and not any(x & 1 for x in rows[r]): + rows[r] = [x//2 for x in rows[r]] + exponents[r] -= 1 + for r,row in enumerate(rows): + expected = [0]*n + if r < 735: + expected[r] = 1 << exponents[r] + if r in w['live']: + expected[r+112] = 1 << exponents[r] + need(row == expected, 'Independent dense transpose columns') + return {'columns':n, 'coefficients':n*n, 'arithmetic':'Dense integer rows with binary denominators; reverse chronology'} + + +def native(w): + C = load(ROOT/'research/p104-native-channel/vendor/clifford_exact.py', 'p104_productive_clifford') + V = load(ROOT/'research/p104-native-channel/vendor/native_verify.py', 'p104_productive_gaussian') + @lru_cache(None) + def chart(i): + return C.canonical_frame(9, tuple(w['frames'][i])) + recipes = {} + def check(a,b): + if (a,b) not in recipes: + recipe,_ = C.lower_child(chart(a).adjoint().then(chart(b))) + expected = V.adjoint(V.frame(w['frames'][a],9)) + V.frame(w['frames'][b],9) + V.equal(V.recipe(recipe),expected,'Native chart change and exact global phase') + need(recipe['rank'] == abs(len(w['frames'][a])-len(w['frames'][b])), 'Native boundary rank') + recipes[a,b] = recipe + return recipes[a,b] + for e in w['program']: + if e[0] == 'MOVE': + check(e[2],e[3]) + main = set(w['live']) | {r+112 for r in w['live']} + helper_profile = Counter() + for r in range(735): + if r not in main: + helper_profile[check(w['initial'][r],w['final'][r])['rank']] += 1 + adapters = [] + for r,q in zip(w['live'],w['ports']): + need(w['frames'][w['initial'][r]] == [q], 'Literal central port') + need(span(w['frames'][w['final'][r+112]]) == frozenset(x for x in range(512) if not (x&q).bit_count()%2), 'Literal output hyperplane') + tests = [ + (C.cgate(9,q,1).adjoint().then(chart(w['initial'][r])), V.adjoint((('C',q,1),))+V.frame(w['frames'][w['initial'][r]],9)), + (chart(w['final'][r+112]).adjoint().then(C.cgate(9,q,-1).then(C.fourier(9))), V.adjoint(V.frame(w['frames'][w['final'][r+112]],9))+(('C',q,-1),)+V.fourier(9))] + for actual,expected in tests: + recipe,_ = C.lower_child(actual) + need(recipe['rank'] == 0, 'Free intrinsic main adapter') + V.equal(V.recipe(recipe),expected,'Main endpoint phase') + adapters.append(recipe) + bad = json.loads(json.dumps(next(iter(recipes.values())))) + bad['left']['phase'] = (bad['left']['phase']+1)%4 + a,b = next(iter(recipes)) + try: + V.equal(V.recipe(bad),V.adjoint(V.frame(w['frames'][a],9))+V.frame(w['frames'][b],9),'Wrong phase control') + except ValueError: + pass + else: + raise ValueError('Wrong native phase accepted') + payload = [[a,b,recipes[a,b]] for a,b in sorted(recipes)] + adapters + return {'distinct_maps':len(recipes),'main_adapters':len(adapters),'helper_normalizers':2*sum(helper_profile.values()), + 'helpers':dict(helper_profile),'recipe_payload_sha256':sha256(json.dumps(payload,sort_keys=True,separators=(',',':')).encode()).hexdigest(), + 'wrong_phase_rejected':True, 'proof':'Every signed Pauli image and exact global phase; frame induction at every positive tensor width'} diff --git a/research/p104-productive-controller/price.py b/research/p104-productive-controller/price.py new file mode 100644 index 0000000000..6c856e173c --- /dev/null +++ b/research/p104-productive-controller/price.py @@ -0,0 +1,153 @@ +"""Complete mixed-target price, compiler and outer transfer. + +The interval and compiler bounds follow zxv and Cao Yifan. The productive +recursion is by Jacob Alan Sussman. The controller is by Cinna Davis. +Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +""" +from collections import Counter +from fractions import Fraction as Q +import local as L + +KAPPA, TESTED = Q('.00304057'), Q('.003040575') +PREVIOUS = Q('605457647/200000000000') + + +def encode(x): + if isinstance(x,Q): + return str(x) + if isinstance(x,dict): + return {str(k):encode(v) for k,v in x.items()} + if isinstance(x,(list,tuple)): + return [encode(v) for v in x] + return x + + +def assemble(local, native, word, physical): + paid, targets = Counter(), Counter() + counts = Counter() + L.need(local['helpers'] == native['helpers'], 'Every productive helper has a native target') + for e in word['physical_events']: + counts[e[0]] += 1 + if e[0] == 'LOCAL': + L.need(e[3] is False, 'Every source invocation is forward') + paid.update(local['paid']) + targets.update(local['helpers']) + elif e[0] == 'QUERY_SHEAR': + paid[1] += 104 + elif e[0] == 'IDLE': + paid[8*len(e[2])] += 208 + main = Counter() + idle = Counter({8*len(e[2]):0 for e in word['physical_events'] if e[0] == 'IDLE'}) + for e in word['physical_events']: + if e[0] == 'IDLE': + idle[8*len(e[2])] += 208 + L.need(idle == physical['whole_idle_jobs'], 'Every whole idle has a native Gaussian and full rank') + for term in word['diagonal']: + main[1+8*sum(term[1:])] += 104 + L.need(main == physical['main_targets'], 'Every main target has its full native phase') + targets.update(main) + L.need(counts['LOCAL'] == 18 and counts['QUERY_SHEAR'] == counts['IDLE'] == 15, 'Complete call census') + # Recount by the two path lengths, without using emitted main diagonals. + second_t = Counter({r:18*n for r,n in local['helpers'].items()}) + second_p = Counter({r:18*n for r,n in local['paid'].items()}) + second_t[145] += 208 + second_p[1] += 15*104 + for length in (7,8): + for j in range(1,length+1): + second_t[1+8*(j+1)] += 208 + second_p[8*(j+1)] += 208 + L.need((targets,paid) == (second_t,second_p), 'Independent full invoice') + L.need(max(targets) == 145 and max(paid) == 72, 'Maximum recursive ranks') + L.need(sum(targets.values()) == 12814 and sum(paid.values()) == 69930, 'Complete field and call counts') + L.need(sum(r*n for r,n in targets.items())-sum(r*n for r,n in paid.items()) == 760, 'Complete rank surplus') + return targets,paid,counts + + +def run(local,native,word,physical): + T,P,counts = assemble(local,native,word,physical) + E = L.load(L.ROOT/'research/higher-moment-strictification/verify.py','p104_productive_intervals') + other = L.load(L.ROOT/'research/kappa-rebuild/architecture/mixed_target_probe.py','p104_productive_second_intervals') + def margin(k): + a,b = E.moment(T,1-k), E.moment(P,1-k) + return a[0]-b[1],a[1]-b[0] + lo,hi,grid = 0,10**12,10**14 + while hi-lo > 1: + m=(lo+hi)//2 + if margin(Q(m,grid))[0] > 0: + lo=m + else: + hi=m + lower,upper = Q(lo,grid),Q(hi,grid) + L.need(margin(lower)[0] > 0 and margin(upper)[1] < 0, 'Strict rational crossing enclosure') + L.need(PREVIOUS < KAPPA < TESTED < lower and margin(PREVIOUS)[0] > 0, 'Changed complete bill improves selected kappa') + t,u,v,c,b = 1-TESTED,Q(1,5),1024,17,18 + target,paid = E.moment(T,t),E.moment(P,t) + tl,th = other.moment(T,TESTED) + pl,ph = other.moment(P,TESTED) + L.need(tl > ph and max(tl,target[0]) <= min(th,target[1]) and max(pl,paid[0]) <= min(ph,paid[1]), 'Two exact moment engines') + alpha = E.divide(paid,target) + gamma = E.divide(E.moment(P,t+u),E.mul(E.power(c,u),target)) + delta = E.divide((Q(sum(T.values())*b),)*2,E.mul(E.power(c,TESTED),target)) + reserve,decay = Q(1,10**10),Q(97,100) + L.need(alpha[1] < 1-reserve and gamma[1] < decay and delta[1] < decay, 'All three charged tail ratios') + L.need(decay**128 < Q(1,16), 'Both tail decay blocks') + normalized = 1/(1+v*reserve)+Q(4,2**32) + L.need(normalized < 1 and c**64 < b**63, 'Full completion, splitting and rounding charges') + theta,power = Q(63,64),1000 + eta = E.scale(E.power(145,-v*TESTED),t) + L.need(2*(c**v)**64 <= (145**v)**63 and eta[0] > theta**power, 'Shifted exits and complement capacity') + L.need(E.power(145,v*TESTED)[1] < 2**power, 'Compiler initial range') + gap = (TESTED-KAPPA)/7 + L.need(gap.numerator == 1, 'Exact compiler integer grid') + step = gap.denominator + def wins(j): + return (step*j+1)**power < 2**j + left,right=1,2 + while not wins(right): + left,right=right,2*right + while right-left > 1: + m=(left+right)//2 + if wins(m): + right=m + else: + left=m + H=step*right + L.need(H > 8*v and wins(right) and not wins(right-1), 'Finite uniform threshold with predecessor rejection') + local_routes = (sum(local['paid'].values())+native['helper_normalizers']+native['main_adapters']+4*104+4*local['owned_lifetimes'])*1000 + L.need(local['real_scalar_allowance']+local_routes < 10**7, 'Every local scalar, route and owned operation is funded') + boundary = sum(len(word['boundaries'][side+'_program']) for side in ('left','right')) + raw = 18*10**7 + 15*1664 + 32*104*(len(word['physical_events'])+boundary) + raw += 32*104*(26+1000) + L.need(raw < 10**9, 'Complete nonrecursive raw bound') + bit = L.read(L.ROOT/'research/query-thinned-controllers/RESULT.json')['ordinary_BIT'] + atom = Q(bit['atom']) + ordinary=(1-atom)*Q(bit['after_cover'])+atom*Q('.0000384599') + admitted=Q(bit['admitted']) + L.need(atom > ordinary > admitted > TESTED and atom < 1-ordinary, 'Retained BIT admission and stock') + outer_module=L.load(L.ROOT/'research/pr4359-p7-padding/dependencies/compiler-refill/endpoint.py','p104_productive_outer') + params={'kappa':KAPPA,'tested_saving':TESTED,'complex_uniform_saving':KAPPA+6*gap, + 'b':KAPPA+5*gap,'a':KAPPA+4*gap,'q':KAPPA+3*gap,'bit_saving':admitted, + 'epsilon':1-gap,'beta':1-3*gap,'r0':gap/10,'stop':gap,'layout':gap,'d':gap} + outer=outer_module.ledger(params) + outer['functional_checks']['actual_new_BIT_stock_sublinear']=params['beta']*(1-atom) + L.need(len(outer['strict_checks']) == 54 and len(outer['functional_checks']) == 4, 'Complete outer predicate inventory') + L.need(all(x > 0 for key in ('strict_checks','functional_checks') for x in outer[key].values()), 'All outer inequalities strict') + wrong_cutoff = E.divide((Q(sum(T.values())*21),)*2,E.mul(E.power(20,TESTED),target)) + L.need(wrong_cutoff[0] > 1, 'Old cutoff fails with this helper inventory') + bad=outer_module.ledger(dict(params,bit_saving=Q('.0027'))) + L.need(any(x <= 0 for x in bad['strict_checks'].values()), 'Insufficient BIT contract rejected') + return encode({'kappa':KAPPA,'kappa_decimal':'.00304057','previous_selected':PREVIOUS,'gain':KAPPA-PREVIOUS, + 'relative_gain_percent':100*(KAPPA/PREVIOUS-1),'raw_root_interval':[lower,upper], + 'raw_headroom':[lower-KAPPA,upper-KAPPA],'margin_at_previous':E.display(margin(PREVIOUS)), + 'targets':T,'paid':P,'productive_fields':sum(T.values()),'paid_calls':sum(P.values()), + 'rank_mass_surplus':760,'full_forward_calls':18,'query_shears':15,'whole_idle_jobs':3120, + 'strictification':{'tested':TESTED,'power':v,'cutoff':c,'floor':b,'tail_offset':u,'reserve':reserve, + 'alpha':E.display(alpha),'gamma':E.display(gamma),'delta':E.display(delta),'normalized_paid_upper':normalized}, + 'compiler':{'theta':theta,'logarithm_power':power,'eta':E.display(eta),'gap':gap,'H':H,'N':'2^'+str(H), + 'integer_test_exponent':right,'uniform_saving':params['complex_uniform_saving'],'word_materialized':False}, + 'nonrecursive':{'local_scalar':local['real_scalar_allowance'],'local_routes':local_routes, + 'raw_scalar_upper':raw,'raw_budget':10**9,'peak_owned_fields':1, + 'fixed_scalar_growth_bound':'At most 2^(16*26000) before native factors; a declared constant, not an attained norm.', + 'tensor_native_growth_bound':'Each rank-r Gaussian has row l1 norm at most 2^(rf); sum of local ranks is 5894.'}, + 'ordinary_BIT':bit,'outer':outer, + 'negative_controls':{'old_cutoff':'Rejected by completion-tail ratio greater than one','old_BIT':'Rejected by outer inequalities'}}) diff --git a/research/p104-productive-controller/verify.py b/research/p104-productive-controller/verify.py new file mode 100644 index 0000000000..9b4c4d61e6 --- /dev/null +++ b/research/p104-productive-controller/verify.py @@ -0,0 +1,86 @@ +"""Check the complete conditional P104 improvement and its immutable evidence. + +Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +""" +import argparse +from copy import deepcopy +from hashlib import sha1,sha256 +import gzip +import json +import sys +from pathlib import Path +sys.dont_write_bytecode = True +sys.path.insert(0, str(Path(__file__).resolve().parent)) +import local as L +import caller as C +import price as P + + +def authenticate(): + count=0 + for row in L.read(L.HERE/'SOURCES.json')['files']: + if row['usage'] == 'input': + raw=(L.ROOT/row['path']).read_bytes() + L.need(sha256(raw).hexdigest() == row['sha256'], 'Changed source: '+row['path']) + L.need(sha1(b'blob '+str(len(raw)).encode()+b'\0'+raw).hexdigest() == row['git_blob'], 'Source Git object') + count+=1 + return count + + +def rejected(action,label): + try: + action() + except ValueError: + return label + raise ValueError('Control accepted: '+label) + + +def run(): + pins=authenticate() + word=L.construct() + local=L.replay(word) + columns=L.reverse_columns(word) + print('PASS complete source rows, reverse integer columns and owned lifetimes',flush=True) + native=L.native(word) + print('PASS every native paid map, productive helper and main adapter',flush=True) + controller=C.construct() + physical=C.physical(controller,word) + costs=P.run(local,native,controller,physical) + controls=C.controls(controller) + bad=deepcopy(word) + bad['program'].remove(next(e for e in bad['program'] if e[0] == 'COPY')) + controls['omitted_copy']=rejected(lambda:L.replay(bad),'Rejected by full arbitrary-input endpoint') + bad=deepcopy(word) + e=next(e for e in bad['program'] if e[0] == 'MOVE') + e[2]=e[3] + controls['wrong_frame']=rejected(lambda:L.replay(bad),'Rejected by literal source-frame check') + bad=deepcopy(local) + bad['helpers'][9]+=1 + controls['unearned_helper']=rejected(lambda:P.assemble(bad,native,controller,physical),'Rejected by native helper census') + result={'status':'PASS_P104_PRODUCTIVE_COMPLETE_KAPPA_00304057','source_inputs_authenticated':pins, + 'local':local,'separate_columns':columns,'native':native,'physical_caller':physical, + 'complete_cost':costs,'negative_controls':controls, + 'limits':['Conditional on the retained native all-column, owned-erasure, compiler, precision/tape and analytic-recovery framework.', + 'The winning uniform compiler word and complete integer multiplier are not materialized.', + 'No proof-kernel check or independent human review is claimed.']} + return P.encode(result),word,controller + + +def main(): + parser=argparse.ArgumentParser(description=__doc__) + parser.add_argument('--write',action='store_true') + args=parser.parse_args() + result,word,controller=run() + for name,data in [('RESULT.json',result),('WORD.json.gz',word),('CONTROLLER.json',controller)]: + path=L.HERE/name + if args.write: + raw=(json.dumps(data,indent=None if name.endswith('.gz') else 2,sort_keys=True)+'\n').encode() + path.write_bytes(gzip.compress(raw,mtime=0) if name.endswith('.gz') else raw) + else: + L.need(L.read(path) == data,'Exact frozen artifact: '+name) + print(result['status']) + print(json.dumps({k:result['complete_cost'][k] for k in ('kappa','gain','raw_root_interval','productive_fields','paid_calls')},sort_keys=True)) + + +if __name__ == '__main__': + main() From bea205d91409506c794ababd81454ca42450d5d2 Mon Sep 17 00:00:00 2001 From: Ali Romman <226877337+aliromman@users.noreply.github.com> Date: Sun, 25 Oct 2026 04:11:25 -0500 Subject: [PATCH 2/3] Improve conditional kappa to .00304117 with one P104 contact --- research/p104-full-frame-contact/PROOF.md | 149 ++++++++ research/p104-full-frame-contact/README.md | 82 +++++ research/p104-full-frame-contact/RESULT.json | 326 ++++++++++++++++++ research/p104-full-frame-contact/SOURCES.json | 150 ++++++++ research/p104-full-frame-contact/TASK.json | 106 ++++++ .../p104-full-frame-contact/VALIDATION.md | 59 ++++ research/p104-full-frame-contact/VERIFY.json | 51 +++ research/p104-full-frame-contact/WORD.json.gz | Bin 0 -> 107042 bytes research/p104-full-frame-contact/construct.py | 48 +++ research/p104-full-frame-contact/pricing.py | 154 +++++++++ research/p104-full-frame-contact/verify.py | 117 +++++++ 11 files changed, 1242 insertions(+) create mode 100644 research/p104-full-frame-contact/PROOF.md create mode 100644 research/p104-full-frame-contact/README.md create mode 100644 research/p104-full-frame-contact/RESULT.json create mode 100644 research/p104-full-frame-contact/SOURCES.json create mode 100644 research/p104-full-frame-contact/TASK.json create mode 100644 research/p104-full-frame-contact/VALIDATION.md create mode 100644 research/p104-full-frame-contact/VERIFY.json create mode 100644 research/p104-full-frame-contact/WORD.json.gz create mode 100644 research/p104-full-frame-contact/construct.py create mode 100644 research/p104-full-frame-contact/pricing.py create mode 100644 research/p104-full-frame-contact/verify.py diff --git a/research/p104-full-frame-contact/PROOF.md b/research/p104-full-frame-contact/PROOF.md new file mode 100644 index 0000000000..72ddd775dc --- /dev/null +++ b/research/p104-full-frame-contact/PROOF.md @@ -0,0 +1,149 @@ +# One full-frame contact in the productive P104 caller + +This package changes one contact in the exact word of +[PR5544](https://github.com/CrocSwap/integer-mult-bounds/pull/5544), at +`e2a6cce2f9db5a2c5f9714f4b9e5292dd3a10581`. The new conditional endpoint is +`kappa = 304117/100000000 = .00304117`. The gain over PR5544 is +`3/5000000 = .00000060`. The selected record stays unchanged. + +The five source assumptions remain: native all-column implementation, +owned erasure, the uniform compiler, precision and tape costs, and analytic +recovery. The ideal operator proof and the complete conditional price are +given below. The enormous uniform word and the rounded integer multiplier +are not materialized. + +## Exact source change + +Let `A=span(30,70,429)`, `B=span(13,19,70,416)`, and `D=F_2^9`. +These are source frames 739, 240 and 127, with `A < B < D` and dimensions +3, 4 and 9. The zero-based source events are: + +| Event | Source instruction | +| --- | --- | +| 16798 | Move register 345 from A to B | +| 16799 | `341 -= 345`, in B | +| 16800 | `341 *= -1`, in B | +| 17061 | Move register 341 from B to D | +| 17067 | Move register 345 from B to D | + +Register 341 is already in B at event 16798. It has no other read or write +before event 17061. Register 345 has no other read or write between events +16798 and 17067. The constructor checks the complete intervening event lists, +including source operands. Other registers can retain their original order. + +Replace event 16798 by moves `341: B -> D` and `345: A -> D`. Run events +16799 and 16800 in D. Remove events 17061 and 17067. Keep all other events +byte-equivalent as JSON records. The scalar coefficients, scalar order, +public boundaries, independent inputs and owned lifetimes stay the same. +The word has 25,310 events, one fewer than the source. + +## Uniform operator identity + +Use the source chart Phi_V at frame V. Put +`T_VU = Phi_V Phi_U^(-1)`. On logical values x and y, the old two-register +fragment ends with + +```text +register 341: Phi_D (y - x) +register 345: Phi_D y. +``` + +The new fragment first places both values in chart D, then performs the same +subtraction and sign. It has exactly these outputs. Equivalently, a common +linear transport on both operands commutes with a scalar ADD and SCALE. +The checked read intervals permit this equality inside the complete word. +The next reads of each register use D in both words. + +For every positive digit-column count, replace each chart by its prescribed +tensor power. The common-chart identity is still valid. Scalar coefficients +remain outside tensor powers. No sum of operators is tensor-powered. +The source native compiler lowers every candidate MOVE and helper boundary. +Its separate Gaussian interpreter checks signed Pauli images and absolute +phase. In particular, the new `A -> D` child has rank six, with its actual +monomial adapters. It is not an uncharged change of coordinates. + +The sparse rational interpreter checks all 743 endpoint rows. The independent +reverse interpreter uses dense integer columns and binary denominators. Both +cover all 552,049 public and owned coefficients. All 735 public inputs remain +arbitrary. The eight owned lifetimes still start and return at the declared +zero states, with peak occupancy one. + +## Complete cost and transfer + +The old fragment pays H1 + 2H5. The replacement pays H5 + H6. Thus + +```text +local paid delta: -H1 - H5 + H6 +complete paid delta: -18H1 - 18H5 + 18H6 +target delta: zero at every rank. +``` + +For `0 < t < 1`, strict subadditivity gives `6^t < 1 + 5^t`. Therefore the +complete signed recursive moment is strictly smaller at every such power. +Rank mass is unchanged. The standard signed-invoice comparator gives the +same conclusion for the actual complete histograms. This comparison uses +all helper targets and all thin and idle jobs, not a local cost alone. + +The new local profile is + +```text +{1:2428, 2:557, 3:389, 4:112, 5:107, 6:17, 7:13, 9:1}. +``` + +All 527 helper targets keep their source ranks +`{4:51, 5:36, 7:24, 8:122, 9:294}`. The 104-port caller, both orientations, +its 18 forward source invocations, 15 thin queries, 15 whole idles and +32 main banks are unchanged. The source's signed exchanges and central-square +translations still supply all backward interfaces. The full bill has 69,912 +paid calls and 12,814 productive fields, with rank surplus 760. The unused +helper 711 keeps both its paid H9 and its productive H9. + +`pricing.py` adapts the pinned PR5544 price engine. Its only mathematical +changes are the new paid-call count, claimed and tested endpoints, and the +comparison endpoint. It recomputes both complete histograms by two counts, +the raw crossing with rational intervals, and a second independent moment +enclosure. The tested saving is `.003041171`. Cutoff 17, floor 18, tail offset +1/5, reserve `10^-10`, power 1024 and logarithm power 1000 remain fixed. +All completion, splitting, capacity, compiler-grid, BIT-stock and 58 outer +predicates must pass. `RESULT.json` records their exact rational values. +The fixed-invoice crossing and its remaining headroom are reported there; +no global optimum or exclusion of other words is claimed. + +The new crossing is in `(.00304117181649, .00304117181650)`. Its increase +over the source crossing is in `(.00000059374018, .00000059374020)`. +The claimed endpoint is below the new crossing by between +`.00000000181649` and `.00000000181650`. The strict compiler gap is +`1/7000000000`; its independently checked integer height is +`H=337848000000000`, with test exponent 48264. The previous grid point fails. +The stated endpoint gain `.00000060` also reflects the different safety +margins below the two crossings; it is not the exact raw-root difference. + +The local scalar program is unchanged. There is one fewer native call and +no new owned field. Native ranks stay at most nine locally; complete maximum +target and child ranks stay 145 and 72. The source's finite bound of fewer +than 26,000 events, scalar growth factor below `2^16` per event and total +local Gaussian rank 5,894 still applies. These bounds fund the reordered +prefix as well as the old prefix. All caller routes, private COPY paths, +returns, normalizers and matching remain in the complete ordinary allowance. +No precision or machine-operation cost is set to zero. + +## Controls and limits + +The checker rejects a one-operand retiming, a changed subtraction sign, an +intervening source read and an omitted paid charge. It also reruns the source +caller controls, exact phase control and adverse compiler/outer controls. +The dependency hashes are checked before the source modules are imported. + +These are author-side exact checks. They are not independent human review or +a proof-kernel verification. The source interpreters and mathematical +framework remain credited dependencies. No merge or selected-frontier update +is part of this contribution. + +Credit Ali Romman's PR5544 for the productive caller; Gareth Davidson's +PR2305, David Arias's PR2152 and Cinna Davis's PR2219 for the composed word. +The P104 shared-chart and dual-ADD retiming packages already use the standard +two-operand identity. The new result is this literal contact and its complete +conditional endpoint. Retain Jacob Alan Sussman's productive recursion, +Cinna Davis's controller, zxv's compiler and outer machinery, Cao Yifan's +pricing lineage, and all geometry, native, COPY and analytic source notices. +Prepared by Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. diff --git a/research/p104-full-frame-contact/README.md b/research/p104-full-frame-contact/README.md new file mode 100644 index 0000000000..ace72d1358 --- /dev/null +++ b/research/p104-full-frame-contact/README.md @@ -0,0 +1,82 @@ +# Conditional kappa .00304117 from one P104 contact + +This contribution increases complete conditional kappa from **.00304057 in +[PR5544](https://github.com/CrocSwap/integer-mult-bounds/pull/5544)** to +**.00304117**, a gain of **.00000060**. It changes the recursive paid profile. +The selected record remains .003027288235 and is not edited. + +The change moves the subtraction on registers 341 and 345, and its sign, +from a four-dimensional frame to the full nine-dimensional frame. It replaces +H1 + H5 by H6 in each of 18 local calls. All scalar coefficients, public +boundaries, independent outputs and owned lifetimes remain unchanged. +The full bill has **69,912 paid calls and 12,814 productive fields**. + +Read [the proof](PROOF.md), [the five-site constructor](construct.py), +[the full receipt](RESULT.json), [the emitted word](WORD.json.gz), and +[the exact source pins](SOURCES.json). The raw crossing and remaining headroom +are recorded in the receipt. No global optimum is claimed. + +This is a focused successor to the released PR5544 at +`e2a6cce2f9db5a2c5f9714f4b9e5292dd3a10581`. Its original commit remains the +parent. The predecessor package is unchanged and is required for replay. +The research started at canonical main +`32890bc5de034ab8fc93ac88ead7279a6a416d04`, priority revision 7. + +## Replay and evidence + +Python 3.12 and the standard library suffice: + +```sh +python3 -B scripts/research_package.py --package research/p104-full-frame-contact +``` + +The scientific marker is `PASS_P104_CONTACT_COMPLETE_KAPPA_00304117`. +The normal and optimized commands reconstruct the source, apply the literal +change, check all 552,049 public/owned coefficients by two interpreters, check +all native maps and target phases, replay the complete physical caller and +compute both full histograms. Two rational moment engines, all compiler and +stock bounds, and all 54 strict plus four functional outer predicates run. +Controls reject a one-sided move, wrong sign, undeclared source read and +omitted cost. Saved compressed words are compared by decompressed JSON. + +[VALIDATION.md](VALIDATION.md) records the checks actually run and their limits. +The standard signed-invoice preflight is also recorded there. The first +search was a bounded common-contact descent on the exact source; the final +constructor contains only the one verified replacement, not that search. + +The five native all-column, owned-erasure, compiler, precision/tape and +analytic-recovery assumptions of PR5544 remain. The enormous uniform word and +complete rounded multiplier are not materialized. No independent human or +proof-kernel acceptance is claimed. The source libraries are inherited, +although their candidate checks run again. + +## Open next questions + +Independent review should check the five edited sites, source-read intervals, +all-width chart identity and complete cost join. Start with the literal +constructor and the before/after invoices. Human or proof-kernel acceptance +is still absent. A later cost improvement must change a paid path or target +contract and pass the same full checks; more digits of this crossing are not +another structural gain. See [TASK.json](TASK.json) for the structured handoff. + +## Credit + +Ali Romman's [PR5544](https://github.com/CrocSwap/integer-mult-bounds/pull/5544) +supplies the productive caller, two scalar interpreters and full price engine. +Gareth Davidson (@bitplane) supplied +[PR2305](https://github.com/CrocSwap/integer-mult-bounds/pull/2305), which joins +David Arias's (@DavidAriasC) +[PR2152](https://github.com/CrocSwap/integer-mult-bounds/pull/2152) coalesced word +and Cinna Davis's (@1337isnot1337) +[PR2219](https://github.com/CrocSwap/integer-mult-bounds/pull/2219) private reuse. +The retained [shared-chart retiming](../p104-shared-chart-retiming/README.md) +and [dual-ADD retiming](../p104-dual-add-retiming/README.md) already give the +two-operand transport method. This package claims the new source contact and +its complete conditional endpoint, not that general identity. + +Retain Jacob Alan Sussman, Cinna Davis, zxv, Cao Yifan and all geometry, +scalar, native, COPY, compiler, precision and analytic authors in the +[predecessor proof](../p104-productive-controller/PROOF.md) and +[native notices](../p104-native-channel/notices). +Prepared by Ali Romman with substantial OpenAI Codex assistance; no subagents. +New work is Apache-2.0. diff --git a/research/p104-full-frame-contact/RESULT.json b/research/p104-full-frame-contact/RESULT.json new file mode 100644 index 0000000000..a4daa8e3f1 --- /dev/null +++ b/research/p104-full-frame-contact/RESULT.json @@ -0,0 +1,326 @@ +{ + "complete_cost": { + "compiler": { + "H": 337848000000000, + "N": "2^337848000000000", + "eta": { + "lower": "0.000000185282065079605829383859", + "upper": "0.000000185282065079605829383860" + }, + "gap": "1/7000000000", + "integer_test_exponent": 48264, + "logarithm_power": 1000, + "theta": "63/64", + "uniform_saving": "5322049/1750000000", + "word_materialized": false + }, + "full_forward_calls": 18, + "gain": "3/5000000", + "kappa": "304117/100000000", + "kappa_decimal": ".00304117", + "margin_at_previous": { + "lower": "0.149437868133364955605863720182", + "upper": "0.149437868133364955605863720183" + }, + "negative_controls": { + "old_BIT": "Rejected by outer inequalities", + "old_cutoff": "Rejected by completion-tail ratio greater than one" + }, + "nonrecursive": { + "fixed_scalar_growth_bound": "At most 2^(16*26000) before native factors; a declared constant, not an attained norm.", + "local_routes": 5334000, + "local_scalar": 217428, + "peak_owned_fields": 1, + "raw_budget": 1000000000, + "raw_scalar_upper": 184647552, + "tensor_native_growth_bound": "Each rank-r Gaussian has row l1 norm at most 2^(rf); sum of local ranks is 5894." + }, + "ordinary_BIT": { + "admitted": "17/5000", + "after_cover": "69/20000", + "atom": "1/250", + "before_cover": "3459/1000000", + "ordinary_saving": "8590884599/2500000000000", + "prime_rule": "odd q > 2^26*N^5 avoiding all fixed denominators and rank witnesses" + }, + "outer": { + "functional_checks": { + "actual_new_BIT_stock_sublinear": "1742999999253/1750000000000", + "fixed_halo_explicit_metadata_branch": "134750000001/1750000000", + "new_BIT_row_stock_sublinear_in_active_group": "6978999997009/7000000000000", + "new_semantic_group_guard": "3/7000000000" + }, + "margins": { + "boundary_algebraic_matrix": "149017357978711807/49000000000000000000", + "fused_gaussian": "149017357936135421/49000000000000000000", + "global_coordinate_router": "10644097/3500000000", + "group_bit_router": "74508682468067709/24500000000000000000", + "group_scans": "3499999999/3500000000", + "main_transform": "149017350978711807/49000000000000000000", + "microbox_face_corrections": "134750000001/1750000000", + "polynomial_products": "6999999999/7000000000", + "sparse_union_movement": "20055267357978711807/49000000000000000000" + }, + "parameters": { + "a": "10644097/3500000000", + "b": "4257639/1400000000", + "beta": "6999999997/7000000000", + "bit_saving": "17/5000", + "cap_xi": "44555267350978711807/49000000000000000000", + "complex_uniform_saving": "5322049/1750000000", + "d": "1/7000000000", + "epsilon": "6999999999/7000000000", + "kappa": "304117/100000000", + "lambda_": "1993917659/2000000000", + "lambda_prime": "6978711807/7000000000", + "layout": "1/7000000000", + "q": "21288193/7000000000", + "r0": "1/70000000000", + "stop": "1/7000000000", + "tested_saving": "3041171/1000000000" + }, + "strict_checks": { + "actual_bit_above_effective": "1255903/3500000000", + "actual_logarithmic_gamma_guard": "1/7000000000", + "actual_logarithmic_group_guard": "4444732659521288193/24500000000000000000", + "alpha_logarithm_absorption": "1/70000000000", + "boundary_algebraic_matrix_above_kappa": "27978711807/49000000000000000000", + "cap_above_band": "20055267350978711807/49000000000000000000", + "cap_below_cell": "4444732642021288193/49000000000000000000", + "cap_below_phase_cell_power": "53444732649021288193/49000000000000000000", + "complex_above_effective": "1/7000000000", + "complex_below_one_over_32": "39492361/1400000000", + "complex_endpoint": "1/3500000000", + "epsilon_below_one": "1/7000000000", + "epsilon_positive": "6999999999/7000000000", + "fine_prime_halo_umbrella": "7/2", + "fused_gaussian_above_kappa": "27936135421/49000000000000000000", + "gaussian_above_main": "3478711807/24500000000000000000", + "global_coordinate_router_above_kappa": "1/1750000000", + "global_gamma_power_slack": "9/70000000000", + "group_below_dimension": "1/3500000000", + "group_bit_router_above_kappa": "17468067709/24500000000000000000", + "group_gauge_power_slack": "4444732659171288193/24500000000000000000", + "group_key_fits_record": "1/3500000000", + "group_positive": "6999999997/7000000000", + "group_scans_above_kappa": "27260593/27343750", + "halo_covers_generic_inverse_radius": "5", + "improvement_over_user_baseline": "655099790400418148631/500000000000000000000000", + "lambda_above_internal": "1/14000000000", + "lambda_above_sigma": "3/14000000000", + "lambda_above_tau": "1/14000000000", + "lambda_prime_above_lambda": "1/14000000000", + "lambda_prime_above_leaf": "2795742361/9800000000000000000", + "leaf_saving_above_effective": "1395742361/9800000000000000000", + "main_transform_above_kappa": "20978711807/49000000000000000000", + "membership_arithmetic_fits_record": "1/7000000000", + "microbox_face_corrections_above_kappa": "269489355907/3500000000", + "microbox_halo_volume": "553000000003/7000000000", + "new_complex_uniform_saving_above_b": "1/7000000000", + "new_semantic_guard_with_C1_one": "1/7000000000", + "polynomial_products_above_kappa": "6978711809/7000000000", + "positive_layout_slack": "1/7000000000", + "q_below_effective": "1/7000000000", + "q_below_internal": "1/7000000000", + "q_below_leaf": "2795742361/9800000000000000000", + "q_positive": "21288193/7000000000", + "short_record_fallback": "1395742361/1400000000", + "source_axis_superpolynomial": "1/7000000000", + "sparse_union_movement_above_kappa": "19906250027978711807/49000000000000000000", + "stop_below_one": "6999999999/7000000000", + "stop_positive": "1/7000000000", + "strassen_integer_power_gap": "1951441519231", + "support_router_span": "3/7000000000", + "theta_positive_polynomial_power": "2", + "union_header_fits_record": "3/7000000000", + "union_tag_work_per_visit_fits_record": "3/7000000000" + } + }, + "paid": { + "1": 45264, + "16": 416, + "2": 10026, + "24": 416, + "3": 7002, + "32": 416, + "4": 2016, + "40": 416, + "48": 416, + "5": 1926, + "56": 416, + "6": 306, + "64": 416, + "7": 234, + "72": 208, + "9": 18 + }, + "paid_calls": 69912, + "previous_open_pr5544": "304057/100000000", + "productive_fields": 12814, + "query_shears": 15, + "rank_mass_surplus": 760, + "raw_headroom": [ + "181649/100000000000000", + "3633/2000000000000" + ], + "raw_root_interval": [ + "304117181649/100000000000000", + "6082343633/2000000000000" + ], + "relative_gain_percent": "6000/304057", + "strictification": { + "alpha": { + "lower": "0.999999999145880726810628283573", + "upper": "0.999999999145880726810628283574" + }, + "cutoff": 17, + "delta": { + "lower": "0.963355080494670721016731077055", + "upper": "0.963355080494670721016731077056" + }, + "floor": 18, + "gamma": { + "lower": "0.965211488800306029729343582168", + "upper": "0.965211488800306029729343582169" + }, + "normalized_paid_upper": "5242880004882813/5242880536870912", + "power": 1024, + "reserve": "1/10000000000", + "tail_offset": "1/5", + "tested": "3041171/1000000000" + }, + "targets": { + "145": 208, + "17": 416, + "25": 416, + "33": 416, + "4": 918, + "41": 416, + "49": 416, + "5": 648, + "57": 416, + "65": 416, + "7": 432, + "73": 208, + "8": 2196, + "9": 5292 + }, + "whole_idle_jobs": 3120 + }, + "complete_paid_delta": { + "1": -18, + "5": -18, + "6": 18 + }, + "limits": [ + "The five framework assumptions of PR5544 remain.", + "The uniform compiler word and complete rounded multiplier are not materialized.", + "No independent human or proof-kernel acceptance is claimed." + ], + "local": { + "endpoint_coefficients": 552049, + "helpers": { + "4": 51, + "5": 36, + "7": 24, + "8": 122, + "9": 294 + }, + "owned_lifetimes": 8, + "paid": { + "1": 2428, + "2": 557, + "3": 389, + "4": 112, + "5": 107, + "6": 17, + "7": 13, + "9": 1 + }, + "peak_owned_fields": 1, + "public_inputs": 735, + "real_scalar_allowance": 217428 + }, + "local_paid_delta": { + "1": -1, + "5": -1, + "6": 1 + }, + "native": { + "distinct_maps": 2981, + "helper_normalizers": 1054, + "helpers": { + "4": 51, + "5": 36, + "7": 24, + "8": 122, + "9": 294 + }, + "main_adapters": 208, + "proof": "Every signed Pauli image and exact global phase; frame induction at every positive tensor width", + "recipe_payload_sha256": "5901f62355998c69803fb961c5b0d20415f7006880b2cefbb4a57fbdb982d9a4", + "wrong_phase_rejected": true + }, + "negative_controls": { + "intervening_source_read": "No intervening read or write", + "missing_central_translation": "Rejected by the complete Laurent endpoint", + "one_operand_only": "Common scalar chart", + "uncharged_call": "Complete field and call counts", + "wrong_contact_sign": "All 743 public and owned rows" + }, + "physical_caller": { + "central_square_columns": 53248, + "full_calls": 18, + "main_targets": { + "145": 208, + "17": 416, + "25": 416, + "33": 416, + "41": 416, + "49": 416, + "57": 416, + "65": 416, + "73": 208 + }, + "new_paid_jobs": 0, + "physical_contacts": 7488, + "ports": 104, + "route_payload_sha256": "7f4f0ca768ffbc4f93dcff575592c4c67411f46b4289e45b73f715a2ad47b142", + "tensor_rule": "Factorwise native maps; scalar signs stay outside the tensor power.", + "whole_idle_jobs": { + "16": 416, + "24": 416, + "32": 416, + "40": 416, + "48": 416, + "56": 416, + "64": 416, + "72": 208 + }, + "wrapper_sites": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + 31 + ] + }, + "separate_columns": { + "arithmetic": "Dense integer rows with binary denominators; reverse chronology", + "coefficients": 552049, + "columns": 743 + }, + "source_inputs_authenticated": 22, + "status": "PASS_P104_CONTACT_COMPLETE_KAPPA_00304117" +} diff --git a/research/p104-full-frame-contact/SOURCES.json b/research/p104-full-frame-contact/SOURCES.json new file mode 100644 index 0000000000..5c136e714d --- /dev/null +++ b/research/p104-full-frame-contact/SOURCES.json @@ -0,0 +1,150 @@ +{ + "schema_version": 1, + "base_commit": "e2a6cce2f9db5a2c5f9714f4b9e5292dd3a10581", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "fc3d4ba105e1f097d0d7d051a308281e86ab1446", + "sha256": "66974efdced4083c00025f97d95d83909a226cdf801edb9301c195c6641f6903" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "f126dd2e2dad2b669e75d1d0d0bd05c600725602", + "sha256": "f7a48bfa2659b88378282a8eee7d9fe52cdf505594124c4d1686b58510fffd72" + }, + { + "path": "research/p104-productive-controller/CONTROLLER.json", + "usage": "input", + "git_blob": "cc539db709cf7a6c42872c4380902736ad453af3", + "sha256": "a84f6bbd547379597464e56c420cc665f96bc43a9a1351eed4b7cd0fce3cc4b9" + }, + { + "path": "research/p104-productive-controller/RESULT.json", + "usage": "input", + "git_blob": "5637130d4a3884948eda39c185e3b6e8f4b4717b", + "sha256": "03e9f8424b9166899d3ae3b188d9defb851162a3183ecab237fb783d78216782" + }, + { + "path": "research/p104-productive-controller/WORD.json.gz", + "usage": "input", + "git_blob": "70f954b346dcf5ee27d394f74d0804731deafd86", + "sha256": "e5e955d7c9d5ea5dfea49c0e093037df577aa43813dcad5427ebca41a4ad35ec" + }, + { + "path": "research/p104-productive-controller/caller.py", + "usage": "input", + "git_blob": "6ac5e735691555ecafe2afbcff71edd923178113", + "sha256": "300d40043953e4f6aecfde8f2d1004b8ad6dc5a79ec3c7666c9908c2466c91c8" + }, + { + "path": "research/p104-productive-controller/local.py", + "usage": "input", + "git_blob": "dbb3d56a4f5b733bb0c32a91249d1f6a7e1ab5d2", + "sha256": "878734dfd64c4b9d362d0ae476cc5c2a19fe93e48b7378763b23f3e0dd0a5a71" + }, + { + "path": "research/p104-productive-controller/price.py", + "usage": "input", + "git_blob": "6c856e173c58f2f201064a88745bb80052cd3875", + "sha256": "e46c1264c4acb037bae4df36ccdf3386980ef3d178aa7f0607dbd3f3333ed139" + }, + { + "path": "research/p104-coalesced-private-reuse/compose.py", + "usage": "input", + "git_blob": "402e0ff402bc9822288e1bf069f0b5712069c11e", + "sha256": "9ac1c0e5ac26ed98976148ef9fd73ee58533533f9581c701deaf26ced899ae9e" + }, + { + "path": "research/p104-coalesced-private-reuse/predecessor2152.tar.gz", + "usage": "input", + "git_blob": "cc1a5cb5735ee489388004c27b709a825faf59d1", + "sha256": "67867369c99212184c13d75369811ea928c89dca0e004287a9dcf0b2c93bcdb8" + }, + { + "path": "research/complex-block-rank-optimum/inputs/selected.json.gz", + "usage": "input", + "git_blob": "5f9ef680983b0b63a4c82a4ed909837b78e690cd", + "sha256": "16bc0ebb04b4be6c0ade74badc6a0c0cdba4215eda86e4ff9f13abf8ecebd219" + }, + { + "path": "research/frame-sa504/inputs/hamming/PROTOTYPE.json", + "usage": "input", + "git_blob": "9efe30ee107b9c67f15f1c726e1a1cb5cef03929", + "sha256": "327d2a868043e846381aa58a33053c24425e8cad522ff401b10ec8af1d649a3f" + }, + { + "path": "research/p104-native-channel/inputs/P104-FIXTURE.json", + "usage": "input", + "git_blob": "2e16f99b295bb386fd13bd8fbd57b42ef54143a9", + "sha256": "516c06f6ec3cb84be588c546108de897650288576dd5fbf5fe44b9c5546ad8a4" + }, + { + "path": "research/p104-native-channel/vendor/clifford_exact.py", + "usage": "input", + "git_blob": "166841a037f069249f6f7f6dedb89248812f59e2", + "sha256": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962" + }, + { + "path": "research/p104-native-channel/vendor/native_verify.py", + "usage": "input", + "git_blob": "2c209dfa9cfade3bc20ac5fc9d876b433a147f8c", + "sha256": "3049471905b47b385c88378a1a3be7a18b8858aadd035b8a6da2f4a03b470f38" + }, + { + "path": "research/kappa-0023-productive-jobs/dependencies/kappa-next-regime/direct-decoder/sources/DATA-PHASES.json", + "usage": "input", + "git_blob": "d9a4f84211182ca200c081ea061d724c8a2cfb70", + "sha256": "c5916ff312678f12aba403847643fbbc29f643acec60bdf836fa56cd3e8251fa" + }, + { + "path": "research/joint-helper-lattice/CONTROLLER.json", + "usage": "input", + "git_blob": "49a2f0675819f9deeea27ed77be2c2b6ff2e87e5", + "sha256": "1f5d6aa267e4e66048818714b5d3b5eae17a58abe91d15deeaa34574f7391a5f" + }, + { + "path": "research/higher-moment-strictification/verify.py", + "usage": "input", + "git_blob": "4b24a5096154736ce060474eb8c72dc64c303699", + "sha256": "0ce7e7137422d5ffeda22085c81fa88471bbe963100fdad62e659f1e3bf89326" + }, + { + "path": "research/kappa-rebuild/architecture/mixed_target_probe.py", + "usage": "input", + "git_blob": "4fc05ab08138218ba9f09e5c89b649afae7c914e", + "sha256": "011c3c9d0cf81103dc84d709a0e36793eb7c5ae3f23c85eac27650ef13afa04a" + }, + { + "path": "research/pr4359-p7-padding/dependencies/compiler-refill/endpoint.py", + "usage": "input", + "git_blob": "340e1f0ffb8a1a9c38fbbd9119580b6d23e01b59", + "sha256": "d097e55f06c3f244f2074ffd7c1a0a5f3c4b4b6a6accf9619d1dde5c0ae85e15" + }, + { + "path": "research/query-thinned-controllers/RESULT.json", + "usage": "input", + "git_blob": "e0695152c98d727edfd0d2034b58a1c7e8682c0c", + "sha256": "6ebfc8c0f09166f4834e9d7427410cb31aefff2cd4d4ce588c8e52c9c70e9a0f" + }, + { + "path": "research/pr4359-p7-padding/native_inventory.py", + "usage": "input", + "git_blob": "8d2d96e3998254c2333c43fe47cdfd074cbd811e", + "sha256": "65539acaf45bdfe8c5aee6830f9c9b3d1107c442a60842ef803fdd7688de8f32" + }, + { + "path": "research/p104-coalesced-private-reuse/RESULT.json", + "usage": "input", + "git_blob": "f4cb528c2cc413f34e2ac83c42225c7a1cf11bd3", + "sha256": "580adb3de7037acc6f7e41cc186e8a210463afaa696d57892643d55acd0040c8" + }, + { + "path": "research/p104-coalesced-private-reuse/SOURCES.json", + "usage": "input", + "git_blob": "58f245e194b794b7bacd8ea88f9814d373ed91c3", + "sha256": "232fc3ca3928acc704333def0b8391f94a8e8736ef045c1b5de5b396be37cdc2" + } + ] +} diff --git a/research/p104-full-frame-contact/TASK.json b/research/p104-full-frame-contact/TASK.json new file mode 100644 index 0000000000..c917d3fc0c --- /dev/null +++ b/research/p104-full-frame-contact/TASK.json @@ -0,0 +1,106 @@ +{ + "schema_version": 1, + "task_id": "scalar-to-moment", + "priority_revision": 7, + "base_commit": "e2a6cce2f9db5a2c5f9714f4b9e5292dd3a10581", + "original_card": { + "id": "scalar-to-moment", + "question": "Can a changed frame itinerary remove a paid transition beyond the already covered scalar A2 contractions?", + "starting_points": [ + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "research/staged544-a2-graph-rewrite/README.md", + "research/staged544-separated-a2/README.md", + "research/staged544-a2-composition-audit/README.md", + "research/staged544-a1858-contraction-audit/README.md" + ], + "methods": [ + "Derive the changed legal frame itinerary and exact child histogram.", + "Prove a scoped obstruction showing why that scalar gain cannot change the paid contract." + ], + "acceptance_gate": "An unchanged histogram is not a kappa gain; record any separate runtime or proof benefit explicitly.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read the A2 and separated-A2 constructions and their composition/contraction audits. Scalar contractions can preserve the complete recursive histogram; fewer ADDs alone do not justify further scans.", + "scope": "Source-binding orientation only; no scientific replay, theorem acceptance or supplier admission. Budget any heavy replay separately." + }, + "first_experiment": "Identify an actual paid transition to remove and construct a legal replacement frame itinerary, charging restoration, source windows and changed helpers. Compare complete before/after histograms. Stop if only scalar count changes; report that benefit honestly, without expanding the same scalar-only census.", + "bottleneck_link": "A legal change to the histogram, not addition count alone, is the bridge to an exponent gain.", + "allowed_variations": [ + "One existing scalar simplification and one proposed frame-path change." + ], + "scope_change_triggers": [ + "Submitting only another scalar count as completion of a paid-profile task." + ], + "overlap_terms": [ + "scalar simplification", + "paid profile", + "R439", + "3998", + "4019", + "4112", + "4152", + "staged544-a2-graph-rewrite", + "staged544-separated-a2", + "staged544-a2-composition-audit", + "staged544-a1858-contraction-audit" + ], + "existing_checks": [ + { + "scope": "PR #3998: consecutive A2 scalar contraction", + "evidence": "research/staged544-a2-graph-rewrite/README.md", + "remaining": "A genuinely changed paid itinerary or a distinct independent audit; no default scalar-only expansion.", + "status": "author-checked", + "source_commit": "389268a6b5e0373a3125d5c6fcd6995f4ea324f5", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4019: separated A2 sites with unchanged recursive histogram", + "evidence": "research/staged544-separated-a2/README.md", + "remaining": "A genuinely changed paid itinerary or a distinct independent audit; no default scalar-only expansion.", + "status": "author-checked", + "source_commit": "f408e09df300b575235f7f77f81948071397e16d", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4112: composition audit", + "evidence": "research/staged544-a2-composition-audit/README.md", + "remaining": "A genuinely changed paid itinerary or a distinct independent audit; no default scalar-only expansion.", + "status": "author-checked", + "source_commit": "205b7380656ba4b6316a8a493b1a3c679b8f7a0e", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4152: A1858 contraction audit", + "evidence": "research/staged544-a1858-contraction-audit/README.md", + "remaining": "A genuinely changed paid itinerary or a distinct independent audit; no default scalar-only expansion.", + "status": "author-checked", + "source_commit": "caaa14cde5962adc372fdca71f63d0f29e73c8b2", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + } + ] + }, + "scope_status": "refined", + "actual_scope": "Retime the register341/register345 P104 contact from the four-plane to the full frame, and certify a complete conditional kappa gain over PR5544.", + "scope_change_reason": "The donor requires a kappa gain. PR5544 released a new P104 productive caller during this investigation. The previous native-word and helper-boundary screens found no gain. This card classifies the resulting source-bound paid-path change; no task was rerolled.", + "bottleneck_link": "The exact local change -H1-H5+H6 reduces the complete paid moment at all 18 FULL sites with every productive target retained.", + "budget_minutes": null, + "stop_rule": "Accept only an exact arbitrary-input native replacement and a fully funded complete kappa above PR5544; otherwise release the finite candidate.", + "outcome": "completed", + "evidence": "See RESULT.json, PROOF.md and VALIDATION.md for executed checks and inherited assumptions.", + "author": "Ali Romman with OpenAI Codex assistance", + "ai_assistance": "Substantial OpenAI Codex assistance; no subagents.", + "open_questions": [ + { + "question": "Can an independent reviewer accept the exact contact replacement and its complete conditional funding?", + "why_it_matters": "All checks here are author-side; source libraries and the five framework assumptions remain inherited.", + "first_step": "Check the five source sites and read intervals, then replay the native endpoint and both complete moment engines.", + "blocked_by": "No technical dependency is missing; independent scientific review remains pending." + } + ] +} diff --git a/research/p104-full-frame-contact/VALIDATION.md b/research/p104-full-frame-contact/VALIDATION.md new file mode 100644 index 0000000000..6997ff73a4 --- /dev/null +++ b/research/p104-full-frame-contact/VALIDATION.md @@ -0,0 +1,59 @@ +# Validation record + +Scientific base: canonical main +`32890bc5de034ab8fc93ac88ead7279a6a416d04`. +Immediate immutable predecessor: PR5544, +`e2a6cce2f9db5a2c5f9714f4b9e5292dd3a10581`. +Environment: macOS, bundled CPython 3.12.14, standard library only. +All scientific checks run serially in the isolated contribution worktree. + +The first full authoring replay passed with `--write`. It generated the new +receipt and word after all endpoint, native, caller and pricing checks. +The registered normal and optimized comparisons both passed. Each printed +`PASS_P104_CONTACT_COMPLETE_KAPPA_00304117`. The runner printed +`PASS_REGISTERED_RESEARCH_PACKAGE outcome=completed`. + +```sh +python3 -B scripts/research_package.py --package research/p104-full-frame-contact +python3 -B scripts/research_package.py --package research/p104-full-frame-contact --check-only +python3 -B scripts/check_research_commit.py --package research/p104-full-frame-contact +``` + +The source and candidate both pass the exact sparse rational endpoint. +The candidate also passes the separate dense integer transpose interpreter: +743 columns and 552,049 coefficients. All source inputs, all 527 helper +outputs and all eight owned lifetimes remain included. Native checks cover +2,981 distinct paid/helper maps, 208 main adapters, every helper normalizer, +7,488 caller boundary contacts and all main and idle target phases. + +Both rational moment engines pass. The full invoice has 69,912 paid jobs, +12,814 productive fields and rank surplus 760. Compiler height +`337848000000000`, the preceding failing grid point, all tail and capacity +conditions, ordinary BIT stock, and all 54 strict plus four functional outer +predicates pass. The one-sided move, wrong sign, undeclared source read, +missing paid charge, missing central translation and native phase controls +reject. The old cutoff and insufficient BIT controls also reject. + +The shared comparator read the complete before/after histograms extracted +from both `RESULT.json` files. With the same rank and caller contract, +`scripts/compare_recursive_invoices.py` reports `uniformly_better`. +The exact signed delta is `{1:-18,5:-18,6:18}`; targets are unchanged. +Its hinge values at ranks 0, 1, 5 and 6 are 0, -18, -18 and 0. Paid and +target rank masses are 239108 and 239868 in both constructions. This is a +separate integer arithmetic check, not a source or physical proof by itself. + +The earlier source PR5544 also passed its own +[hosted replay](https://github.com/CrocSwap/integer-mult-bounds/actions/runs/40177474279) +at the pinned head. That run does not test this new change. + +Publication checks: registered normal and optimized replay, metadata/pins +and whitespace checks passed. Committed-byte and export checks follow below. +Hosted status for the new contribution is separate from local validation. + +The five inherited framework assumptions remain. Independent human review, +formal-kernel verification, the enormous uniform compiler word and the full +rounded multiplier are not supplied. No selected-frontier or shared-source +file is changed. The predecessor commit is retained for a reproducible stack; +only this package is new in the successor commit. + +Prepared by Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. diff --git a/research/p104-full-frame-contact/VERIFY.json b/research/p104-full-frame-contact/VERIFY.json new file mode 100644 index 0000000000..e6d663d6fd --- /dev/null +++ b/research/p104-full-frame-contact/VERIFY.json @@ -0,0 +1,51 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/p104-productive-controller/CONTROLLER.json", + "research/p104-productive-controller/RESULT.json", + "research/p104-productive-controller/WORD.json.gz", + "research/p104-productive-controller/caller.py", + "research/p104-productive-controller/local.py", + "research/p104-productive-controller/price.py", + "research/p104-coalesced-private-reuse/compose.py", + "research/p104-coalesced-private-reuse/predecessor2152.tar.gz", + "research/complex-block-rank-optimum/inputs/selected.json.gz", + "research/frame-sa504/inputs/hamming/PROTOTYPE.json", + "research/p104-native-channel/inputs/P104-FIXTURE.json", + "research/p104-native-channel/vendor/clifford_exact.py", + "research/p104-native-channel/vendor/native_verify.py", + "research/kappa-0023-productive-jobs/dependencies/kappa-next-regime/direct-decoder/sources/DATA-PHASES.json", + "research/joint-helper-lattice/CONTROLLER.json", + "research/higher-moment-strictification/verify.py", + "research/kappa-rebuild/architecture/mixed_target_probe.py", + "research/pr4359-p7-padding/dependencies/compiler-refill/endpoint.py", + "research/query-thinned-controllers/RESULT.json", + "research/pr4359-p7-padding/native_inventory.py", + "research/p104-coalesced-private-reuse/RESULT.json", + "research/p104-coalesced-private-reuse/SOURCES.json" + ], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 600, + "checks": "Verify the exact two-register retiming, complete scalar and native endpoints, productive caller, changed full invoice, two moment engines, compiler, BIT and all outer predicates. Reject one-sided transport, wrong sign, undeclared read and undercharged cost." + }, + { + "argv": [ + "{python}", + "-O", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 600, + "checks": "Verify the exact two-register retiming, complete scalar and native endpoints, productive caller, changed full invoice, two moment engines, compiler, BIT and all outer predicates. Reject one-sided transport, wrong sign, undeclared read and undercharged cost." + } + ] +} diff --git a/research/p104-full-frame-contact/WORD.json.gz b/research/p104-full-frame-contact/WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..1ce96b0130daeea46ef53fdbd32bca2727aa6b35 GIT binary patch literal 107042 zcmZs>1y~$Q+btTL-~@LFZoz{ySa5fDg1ZH`0KpxCyA19Gx8UvscOTqg;7<1bzwi9# z-pjLC^;*4M)!kKHUDITdi0}UXL1UeE$X2_x#bn=WB9(w((52@>jtHE*j*7IU`cV1l zx>Iva3KIc2g5uGmnX2dYqvk}cn=rN&9i6vmDs#!$($a4mhOcXYmqGvQ^S7(6m$i+O z)wli)FlcbY?N@Q0vVeGTLx#_P_ga$If9bIx8?gLn>gSx0oH%CB&OdxgRi8Mf z01+zIa>mGLE3+DI3oB{01&5ENH5BW-66O;tva#LtP>!V+6zbd)8hxNZg?6-d{8lT{ zD>RNXO^FpbW?-rlT5SORlk~J=grCYyVtx)bxDcPVpND=xnr%dVnP+%F`m;hE+nakr zbmEvIJ7D;Q>KY;-0q9=}FWO)r8er(kDHAaBNSOl|dF-1YyM39SAOpX!O_0%k;iI3C zj#r3q9ZsEcSsV7l50_E(=?KnJGJE`GPKmEae7Ka>~uuIOj(4gZSAH5>7!8^t$#q2Y^+7yJjD zhreDFNX0i$n021lo8`&io7NS$IhkSQb|+``(|yudiE|dr(W4Wx9Rg zebe91ak+h1d>MREpN?xD!+Z@mt0ZICen!Wm+ShrKnK+DOAfBr$`SUo~{}rGs%l=f1(qIp8Uz`S5uWrcI(#Nhyvu+^)A;=7@aU%MT1A=rPp0bdjbJZ(s8Ee$2!?6pjIOruNh=lZ=30 zWGmpc-;kKB9emY!v|{5bbbPdT{HF`1`4_w~=E$|gC|U0xsGe5x`P&9*d(2@yWBrry ztwk=voHPAxdzd8jt*&EvI~%b3;p+i+JlBS7MsG_Q@=n1_%bzFT;GVg%HEvB=t94$C zGZeVo?N4Qxt(rf)i{3#e`3I{vP(cb`x7&0FRZO<n*gA!m)h{cUcKR%>iQds$yxjf%K3?pl)0X}L{x3VR4vHcZpPzyw znE_%kwfg%AuNGu_c0ptfbXkC3ybn3PtY@EN4B#ksU@)#8g%KYgMPgoe(L1dvgdR%! z%YpaoKDS@M_2^As^g!g1-?-HvvR^s0L+O5wUv9($c3pM6zrw6o?9T_2 z3f^F{hDO{?1YR0Cf1~@P5cHrvEwZJu(3F`@hUM3rNJF+$DgtBvEqma zI}mDEdA2TrACahIO*M||r_@H|dr zQ_cA5k7r(`AB7lN8Mm9M-M{EH#t{pZ0eO~6@;h%=fEtQfUFXraJ<>eB<2NGM)33Y1 z7&AgbQXuNSn7%=Th(6}R?F((>o~`(;lVHq&e%GS&bmOf=KOLC>#iyFW^#|?OU6w-! z;=`OP|I7NAS(}X*<~O38m%*hi%ygd43-A5rd!vr9WpC=H*jtMi2JFY44vcHO9gFxC zU*nZ86?U*-J%o&kk<>INZOmKM4!?BWtKeoJCEyV7xqCnOs(jlYPyg5zxZ$NoDL z87S`UG&nlWd?R6JQs@EWYSa;&oM+F(ciUqyr0);|c;3{N+R$+Y-^0-NO$HG7-}NYj zb~e8s^&5%?JPYF}`^j%W2Y>#$0EAJoMNN&|S`TTOKO>dv{20g_h*Ogai zq1f5^+pCu!{>n0tdU+83?&RDP5MZ!u94hxlEuQl~2Z_Ye4SzkfhW9ydS0y#*`&f;ah>i^FcY#6;k9i%uD-WBiKJ|D@Kc8G` zNJjHmyO3FyPb-~$Yuh!iBln>AyR;O3KbCiOetT_Sf;$P@*z@&~Y3ck`E1Mn*y|ck` zm$*sf4}K2YiriH1rJUfNKb;NY!w0X=; zIRR_!Dcfmu*M!;{=Pc`8EF;Q*_aOVO+eQ4!$LozdbyuH@*FIV9_SXxstMTi$G4h|0 zIy_zl{IjaD%?9t$Z(49!{I73yON&n&Mk@i5JKNY|n@;P?^||w5r>_=CPKlBt_kb?! zt=q}!*e)$!99Q1r1C@&k*V=D)2a8t3VXde2P&r)H8~(m7bdxgK4)>Q4Nm05`_lpk% zWYq0Au3eX}A@?lpjf$_JNPqvM>yzd^LzWW1E`FLui@;XTiY^7!-1RO&@z@-nelH=r zP`Xot^q_G;D6xQQQ6Wp(r+h&n%fS+YI#GJrw_OXN7~ORo*KqSLp_~c~^_N$Z>(}Rg z=Q@9_D#ek@$1gv{cD~`=(=V(TwIcaRWdmN~URZtKw)#0MlKec11Z@UJ=^}H-tt$IV zdF+~TJhdZENV_8$D%!ka{K5UF<)!^LpQ`qXHViqa z{3=-zUG5AzaOO`IaVjF=82t?4Ps-h93+U~OYM}!c@p3Z1>g<#!HG{oN1pRRDAJ6f? zs=b3`2E@HJt<2H4Cxo51warhm+5%r17mZ?zv*iRfzWb%tnbby}1sln_W9dR<1J$8SJ*F9SJS>+L>vPQ#U(CGQw5%Rym3eFP|n>? z8ganrb#1MTCS*RbiwI=4Uq4(uHRwI|c|Me1oYx7x30`jHytMgV`F9#_ulhfuD$fJl zcKmsVM$JWbZ7kg2f~q@gE}P3*G`AyJIU6?a2Ia(Vub8e5#9uFYV?Bl**Lx>WWxm~a znhLtq+z6_7;>EU>K4p}JM=&ebkz+$KVQw!EwHf(0LEmHe@xEKwcT=}#e!16q!Rd<) zaVAo;4 z=e8x#@en3d#CzY?;1jIQpNITLnI?W~Kmtt~Z_cB{ILz>KhZGL^J`bVv7VS}hNWdLW z>$+5IXnU3}ONk*m?flNY7xq`reD?Pr#XLH$CsvZyKZ2i>g?!%+cJy|>KH39adUy}6 zumFz%e%J5|HTp#NdwVUKZ6DHj?>k@JukTkF*|O}&v}7G5_iQAECS}@*;|J1#$jj*KV3c3hP=vGkND44yMUIc6y>f3yMTUA{TGfSb<)EPUeKT+Js5j0uz zf2z7?9MKmNYJY8@mypIr_Vd>CZjZNcn}{=>_4vRv3P_0W9Tp&ZGC+|St88hgY_G#F zu3d}v?Pf)aSI>!FUCQP49ec)gMlAaH~-%`6M|%=p%?Q zU*NrxW$*S_(g)rCa-=D=vB&;)5m;TNWnQgwZ^e`HB$`rit@mZ-`1*N;Zg+Q1odg$Vsg0PmSDw!D5kD_BA4v=U9!)!qSx24ZuI_W# zcCV81wKrR`!$vV_o2Xc_ASEquuqElXb=%}wT6_)-FA;MB#d+-D;{Kkx&-LWb6WW3r znKPU_fhn#q7afHAD$f=|d-;`fsdJXe`v^nB-?xh4U23O8v22}57xlDy!=WyL-;RP8 z!(`d!S<1I+mFy*&-))TS_2qt>2W>y1UHkSIRLXT zPv3xfFm4F9dY$t9@x<;^y|!dN+m+n#IB8)c3;<@6g)9s*d7`$Q8&8u3-UZX3eHux7 z(Y5!ih5>bCvz#qTkxd##rf!_Cvv&esKU~->F=;^Uwkkp|M>Sp5iC2Fa9C*%Ignu?r zIBohMgws>Lc{?qZ=&(3+ph?Et=HcC3GIx9HV1J#li3*-b>pyPO_X|7l&hEH3AC-A{ zJ*W@gHfWT{&VWu^H|Ozw_<(613SF1Cwjn&V|LEQ(@~#eHZ~NPNtEo$ z_mh70mEp-1|7Hfjw(_#5V^a0EyDs`7iZ|yq*6?-M;q9=wbC;-6^$#^|lE=$b4^|%^ zrOq7zmdL{x>$Q!f7v8$TBA`Kw;*occZ;kn(J`nl!c91~d`tI{@p>2TiU?s}4CPQE1 z>P0-Jl7m^|bqz{R{5ef$MaPkb=b&+C-N%%bB43YlMGYq}`8S=eH_jDMmZS5FIQ_l> zXQN{IEt}av%2k$?)~a73{u!vM97Pj?4V z13QkLZ+GlqYd<0(o4t{9^OMhd3RjwYRYmuEPUESGd#2HT0*yy2YjXhF)vMSjEn=Yr zfs^_Wu!3QxXeTkr`8AE~PY1Homz7Zqujs|?t|NV$pMSW<_6f$9#9zNnT&2S7^PPTR zXTI;H{qS{0@L}H$7M+NSZ7C@WES1+HP4S9#}IjLGQl}%(ru5+(9}z? z(z|)rS%8IX2jSi#_9^=TY@)V;77?{L80mLYJ+#g6&>`BsItJ#a1^CmL;=DPY!CJhP zsvsHwu&H?)L3`$UV)x$1-j6XZmG56Idm~-BR=!oMh&+8W>%`f>A^jnuzTVgCCoyo@ zBGc7+{IF@BG1m69mHv1bd)03tfaN*(3S0n@mMNn7_|F}H`g|t(qBq2x&%^IS+G*D7 z@}KK|8elFl`d-MK8jQZ+mAB|bjT3Yr>H^XDGQ)u+cc9&Qd;WOdEnMZVffgR|41lLli3#@6k{cb+v*)Wa4}*Sc-pkNwTl zD?$ZmAX0`6&iX=kw+nt=*VT1Y?^})6;l}aKoAE_YX@8I+c(k*Q#RVK)Iqgw|&|YiP z>4W&jIV-! zz!vIkUl0no|3`I4r6%d$W{YPXB~{8^G}*}UKHvQ@I^ zK%Zg~cc(4x#d~3o*T%+h^sYl@9Vnp+Cg~d3z5Gnm#lI=hS#ccuWixn#sY8!(V(>8& z@Tz=XdEtRDR`XWuq)bQ!9fu%|g`;Lp=5qsYK;~0wNcApwgD*Xs zNEoaIG^_F3-3;BzxAFG;xtmC?E(qQ@JlQmU`|;;YvBC$fhRmY>K;n&G(765XDdGCw za|-o|PeI2|(M#hUC5Be#9rea^#UyB^^ZJwbGlH*OaOa~R3+o1dkNh0}`MtQ|&V!3- z1E=xIx$Ao6ef^qe^Lo|XCFz@C(EtzsosS`E7v|CY+9>f&^Pfw>7@scWW5p`7wWZb6 z4tKKRr!`$*ff|@Y1b80v>~Guccb5CGwC+=RyzvZFeDJ2dOI)~~7R#Avd@70uaC0?p zubsY)oKM#^7ra>D-QrAwC*YsQ@}Cv%yoxr#XGfh1J$|Xr5z8RUuJf%Wx%@@rK_7FQ zWHPQ>Qf)8-n78Df?ac2k1)%>>TTWyc?v%6AgMQPG)LC;SPBsy&wm&me+5LdICA zo2RSxDCf5a9qv{nbKWD|C)5xeWr!Wt%ma_3&BfS1ffd?`&)AOR54YzbDUCV~l*?_bkF*wp+*Q z^ztX981&g=4t+>N(y zqQ%bu&3_%$-vHHr9mW6kI#zMAd}~s6OHt5q060NiS6Qj3yP%~TT*cfqfRuS(l=*b! zk!||a{_b_G@5JVjaCFPv0PIJ)FQC{PMF(!b0k>a+96QMEyfZtFZDV^NG3d8oBE|^zjc}W=;-@` zwN0KLFDD6Tt;((!W3L`{A756k`-J@KC%Xgz#|IAgvDFLGpq=J}!Fvzz-$E0vg#PN~ z?&aZi0^sNE=i|$*$OM4Ic6P~<{Vk3$E&9(lvdK0!l4Bu-At>{IYTy2w1fo3;`VaPl z8YJGpfS0bfyFP5N3%{#HzZ$Kyut!V4Sc+k1)qh29rhoz$6z7ZxtY z4Mxc~Es26hMa@aW*YmfV*f-DhV?P8>gY3jc?zSM~*H!r&o-OA#=z(g^&6DurVFCE5DX?0EdAvFoW% zy_LSnRh53G1_jYDLyR9uWV^uBzdT zZ7#ZV~zV;vb2P0;91O zl2zj12{6B+2%C4c%J_cQXPS~Mmx5Doh5TjbRlP=lN|vpi_D>$Qa=~Rqs^v~g*atfw z6>8~5GU!Chs@X1aZHA4^#;fsWoEmB@!p|ELvz@HUdrT+E)gl+8=uBZ1b^&?~-@nLe z6+(!|?bc5{EknDOP`-6HL4hgV#o|}$w9#q?>3y+gf7(wb+nE+9O}BC{{W0~b$au}l zNL6{2`6oP-dqNtIIOUUL>0+}}9SJLr-&jp`r6xL}(|II(m0~5RxkUaF2P-XXMrowW z8sp2BLt-{*!?pHs@gp41T)xfXqL+$gnK$ZmC$dk|RrRi_d^K(niYbz=^@O@x-KwW&3%L>|BK_ZG45`jEJ-jFv#g7E@MpLq?Q zKL91aCa*N1h>QA^p1MudvTnzgiY#F$OV#kjTeX~^kkV>`QPD;@v zIlVb(zfz}71Jqcd(xRbM1yV}U=5H`xK(k6~6ytWBt!<;(iR^I%Y)*_v#0dr7NXzE9 z{>n2q0?xY95Y%8_S=eoUp0Yu`(P88>n2D$oo;K~WqRhq7ZvNQuGF})zZCWu(5ZVm4# zwlq@x{*X_RvA)k;=|QB0fLakuXAgL#xLPE?;yzMC<-;vuSgaoZ9lA5cUss&9k|_7h znD9F-t^Q1YDWN5vI}DzC94M?vVZe%ypoI4ZDAw4B+!hFdYDJv;!N!$gr0HI#RTz znNi{A$!~KP_c-D_TE<*!oGlD)ZV7JooB@`ljp-lLEQZ@#e{yrgbOn7p-28Yr^94ig z`D;b1f%;e#s01X1*1PSyJNmOW+*oyuN7D>>azU1$=m>(WLet6g^xU$l={wqV&MS^Diu;?~d z4A(TjRf@Vbu%bA&_g>X(8UJtM*1HICEAKj}>EOKRXbSL0n3s=Y&tKs25n!T%rD>f9 zC4yS5`i!Njhu>8XPZ=ai7azm#_Y@YizDF2(mnA4{fzETq)iBKFs<0gAX+e1+&4)CE z9u^P(-859_nUj2<-F3`7V8deQ+Zdga0}nRWrqW!%kc^SMNtyg+_gv|d(nM)`k$aF_ z%y#?eyORFWDI*-h3K7%>3eJXVQ)e}HRClzQWW}%Lr<<6}~DBYK5qX$0>o?6EOxE2LNo^b}r z@^uxFSZkmey$dm~jrZB&h!p^!?<3Tx{oRQt8FEW$8N|l3Hg`<5)PMyVCrA=WBku4ot428#Yond$7tZwzj z`b5XP4Q=?B74l$X@b4llGj?p*hTx(PLD=$|ZfkRxpAcMrH}Y;T6Fad=5|3d*v>xI# z*WM*(R&~7$hAMd+1l9f?H78beV!32#$wsWNQ6~al7KZEL-{Pup`qM$D-ZVo^sx+k$bj(L( z)TP2fNK`F>;nF1;Tp~RU(0e*rk6-KNy;e z)qGvv(gE^sv(D_NpF*8iD8hU1 z#CVU|=Q9%w1XX9sEv8zEv2GQ-Zsnw_vgwEKCfO4i`{X@DQuSu&Me6jl=~V%$CeX}%GxS4OPJ`s;n#+-!LKBF@f31|N z@2sM=05;ZZ+_oInMeH`e7keRlJL!7bcxyg^?*|a>7@k#Y*s5-TM}4o{p3<$kC-c8e zL<$#QwlJ~+3cCb45VNm6ms<3n;7s{JUoO?06#$!_(>Dqeo=}a9ynSy?6p{RJ_s$aV zCm+FEyjg_&*;~Q{`GOV(6M4tk>fQt6LFz-=WHZs3+QVs@8euAIz7!;DFj^Rig0l_K@Q$9d%{#*LCr=VGf-Q*4h7)06lDTH3_ z_iCo1z>wQ;Swel)b)PQpETj=0{VtvTsb9$Ub|}`yD2pNuC6l?6{~qSd8XWapCr&nA zpjf;xS-3Fy?NxG#;<6^D!ER268>Tl*3vjSPS+&rbH}Epn?!uPxbz)G-w6k0&9U)e( zBF70K<+vbkAui4CsJAKY50O|U1tiTcOSz~=Pu8(H0cYw1xkh}^iL{$znTe_=U(%1f zt%rZxeOe^;M|MyKVWr8!Pm23mf0*}N1pC@|&8KR>Ld9l?6S=j067<`DVvS)oskL3Iq}W{@gu(gCvlOe)P=#>N+^?069>8VJqRy3ae7ky{ zasWx^%;3xEFf?SMpRSqD-N>zG>gSmQH>pE5gQ{r0^1EEig!J(;&VE_7Qr3whM(boh zd0f3R$GV#2j2O$8v$`VD+iuSS(IY9m(SBX1#5iAmLtreURj% zK25&3>G^rt)1{!Vp4C_O4F;Ou`xOQ)nfm@~Ia45-M8@9tmy4ieF@VsI*mo9*i!^Uh zMa{DpQ+eq*kN3`^FHuFBZ{UaU^~kk*!bf-PKXDdN39Zka`jJ;cF#Nbb!Osd?0;^=_ zNRmtNM5(G4Z$A|#zN_C7D>W5@u58(~ZP5t>Wz*ifk{@?}lSdBG_y~Gu(8d&~BF2Ol z_>TXoKh$y#L*H%-y2u_h=h6``wf0_pV)`B9dx07)+HjI|pq@sTFvpM@TB$<(r)40UJiPaExqd#Jtgq-#YER@P~tV9xLbp$QB8^fFx3f_T=K1b7N znu9kdmK9XmspSxUinuI7Al=24C~^(?5xEMXT#EE&6to59Ohh5;6SK#0rfB4>kDU6j zS|ujpn$C(yt|i#BTjnQzpt|QL*))78TskEPml^!iA+2=$z`q@m!J<^MMl?5pU5aP< zEM5>AM3+pf@xRWOjh~|b!5e1SwqKT8>m*+YKyf>+8F`aZPQ=pAEtJ0v=rBGs+ z15T1q%@m8~YLDvf5)zkE@C7*Kt6(Y1Je%di!+adWdOu@H&!bbAhe3Wj-rbp3t5#@E zKv(gpA1j_O`Is}PPbJQWM5<2(qfjDv&M|Iz`UeZMoH3nc608D&G;%x|Rme1UXb{yn zmE&isN^ztDLn0(BW`ql7P8sGa-MhHXcjbiRgjPm!H6*Yy+q0UZy zz#u@c%ti%R2{R@xeI;W@LSD(Fql+K|Eo(<&NiicrE>A$hONY-(hy4$yHl={7**j^p zYC@13YerJg;!>Cxqow%c%hrSg-b>e}p`-&zpJAiJ365AvMCnr>DWsFZY}X0($2TGF zSu>f}bhY+0ue``MNH`s2BGJ_8Vlu6 zSB?m`39S^NM8WZ0G80TgN9|Fh3zJACbI=OcY9me|R?KyWj#sP5($J~OLRX3}LnTe; z3j-K4BO|K=MbJQ{tEal%`g4TBpiDqro(dkJj}tx_UtzDuq231@)=;*LwvGB;wX z!8AbVY+%zHvXJ}L|Y^lzM z)X}mCCN@7^kO_jg(rEx<1PQiCEzCzccO}?8O^dEC*N>F@}ktIF8Hq!q`MA)_b zn?@ofD6fch+BZf**gJRw4JiR%8(#u9G%sY!m2MtE8((Os_W}wx6upMkCoW_Qh6#nt z%=jUf7?mupU@O>}(?=;L6n$v=0@4j3I?29Et+Lr#H8L}khj&oS`i=O@} zcBj5m1M3L3rw{{QmQ0pWLiHIo7(<~aWzm8KzSM@SuqrFYgOB9gRbc(dwS5+0&+;LF z7nwsLB(l;suIUbHc^SdVhAg)-OTmLL`^@!U|B-9S&XEG- z^PYRCXRpE8EQJz&7|v~3*_5$q#2PH%GAiuPIP8q!+_Z-9E!U)ZggxU2aw5tV92#kF z%X5lsz;|<sfp+Mtf~D@4g>qs0YNozitE{jzU>YKH5=b=9-62zV zQY&NOnCUUFg<>)^f<=+@No2Uv%OOEYRK?*;5Q~)oWZy{y2*OJbPfD?blt{7-)2nfi zL!?O|C%B6vG>GT3Q9uIoR+5_x$&oS<;%A;J8+-+Vj1h6Y0Al89u%))C;WCVTN(sQP zRLtTd?7))Pi-}PQ4};IG*L7Q2snJ2msKLls$+|ap5g4Z;jbaWg+;6x{;jQZSUN9A{ zWz<}|$RwKVZhFe=6Ys*SS8w2De2P@rr$nGvprR@bhR@Ukie_1f5oes~VDO@$@lgN6{}mucs5-ehUI~{!j-N(--HB=@?St?B z1fqQ``m%&{>(yhxvLqLhK3uA%cJx)Eu)$vasHqnEYbXvo2eh5|GEmLxE36E=GzaCB zXknIcNoyG~e4jTB%6S@Vt3@wTu{5qsBGU}DLr7Ghu==_>lqq?4=->Ov(f|a7p7d0i z1Y3k_Rw1wnr7|f6@rfFRiK3S40H-3Zw%?(-2nR)*S*v9!&tc4`1-g=b-}1$fxEH}+ zM=<_I_I=tHBNU>nAz&KOItq(X5i&_&O|YYe@n;CUrvE*C6u;FKvQm$koz0Zgr)+OT(g@V4{V^X!ol6Na?=7#2Kn{$>I zmKj=#CBaU>Nb4ucG=Foitj8<;+>52o=biT+ACIBY5%~A%d@LY1_zy}11R;RP|1w1Q z7ZCMd%fFn;$It2!ezeL}vdT614?~3i$`H%{7_*+mqY0Og0y&eDC(z<(GS^!a8*s!? z@wv5rHjurE@7)P>M-_faWoSNtnlYPOxfYh*Op0&7u%dNT5}T@EPgnQyCjCFn&(cS~ zU|S5H)5?vOn*Z^$^o9)qa`TY6Ko)Y^G}A{ovD=z_5r#)}e*Faxx9^xW&}U4rlJicz zgz3D47?SkS5zQBa+ZU73(h#)V)En>lln!}FM$qPR=j42f&`^>dWHLA*QbhAi_+td^K4aF;>Tf2U+u@Hg z5GDI(wX2Dca7sAepyel`33GyxDunNKCn9;L!jQ53kxA?ilu0$7ZL#RMnHocxE5Qg_ z+yXPn2r1gvf$p^{M^=u|#5A_dv8XMhuPC$}raV6h`i|D9SDDbmlfBGnr1R>JD`o9k1sK6~V6qIEQ z^woa=5&q4m=twp~+Mr3QfR4#4Brfi~7x)iE{=*Pq3j=bjywiV85chw5@6RB80*UHwf#&IsPtF?U^eIInnWdUxb#FXhwhFiYuFWigka>a=j)= zi&}*#DfG85%H*BpbX4S=rn^2d-6PF*hUGxY?|4raaV96Ci)_)XZ zvmyC7B(C()C#Bb1ympxHEk1xvW~HB_Map^6`_5Kc*1=Zld}DhvP8zo|g<5nIdx1r0 z=`O+hSKagnM*W8+qL<2-fw2+jUTQC}Djg|cQxY}o@TrG7el|Fqb>N0VH z=KARNZoV8Iib1t_YIY9_ZSw>{eSk3^bsCLbdZpP_YY4hfN&9u}FxEjhvXyffIQw<3WX#z6b!x}RMHH(wYC26x3WnqpWd`Ap zu$c!aG^S)+E^w}OFM>LjU}^fM!A;1_rpG57!rl*7l%6^20i4s--No-16Y}K+;;Avl{X=l zJ96O`x#nji6FB#e%y7y~O{^BQYK*ZGcx12-KWUUq>?Lol+*83z&>2ciFPvD-E@@X`2s)$$)WUavL?>61ruEeUWh|ASQl z?qBasfh~$t9=Pe(BO14(;(N!pJ945XgAZq5-JcOg|F1b?E9j_c>^qC zf(dZ$Xt92%2?04lMOJU}<9QD(b45W{cD7_9oMDAcaqGyg1ns$NF5K4`1$);E1r|pP zAYajTxchWAdD&@r{z&%b&j?yCz2zRk4q;+>oUirkzWl#R@O~71{;A2nd%Bx#U`efF z`-;X`IbnYzKIu-gJnbE%*(5mazJVoPE~wnFjMZKT3OD$3cazzMNuKca=h#!)fpDHn z1u^UlMhfX+2(F1obXZMfV*FRVJBmW1lZM0(6k za?dOob<*Q^M1fhm>b!lt`e!!O)i;KUNa>RvR-*;so)aLX7Z zmqJvlF4TIVzb87xVLeYrC3g5&W*FPD!FUb#Fj z@Z-dau-ju!>AcQag34LQxOA>rEtvGfRBO+)TIl$jrFdpEOR%?a;qO&?W`@4KbzoA*oQmwYObxl`yAuA1pK;MO&SK)*~6Lu&jQLq90SvYDdWl*&INVolG7OiQ6C|5g87J= z_U+5Q6HB*04y9gIH*!%59hC}jC>8dzE#l~p^z8939Su&avTeJ%%EjpcPG15U8^3#n z-Tz7sJ=J`~?}5@W4Wvr&38hr}@XJ)pRjfgzYvd(WmqfY~#ymgd*QRJi!BFlY?oXg0 z$w9K}B5#CvWJ7dC#)esyS19v~C}Xa525IgDc;ZP(BY&zfj3ptHt)c^zmFM`(mD6@o&iEh|`c2aZ|nv4sr_-!G<{h z8Y!BiwjveQ`S3%H{gRnAMfe_frX$4FL1az$F!O`p7@lSD7Bg8L07=lyADhosO(_v) z#w>(WTSQ*t@V8P6b_|sp;krWKic=IHiUYr8hbkWbry6oAN)?^p^GFgnq@Ae`V?;c6 zsuyO8E!$;;B;N@eKU%ZbhnDiCn_T=>3b>jIIeK}3%wfrzTpsN*Y)bp5-*rT>i`aMd z;$6N>;GF2zcH$IS54BJngl6(DXtsp51={=~Y6*qm+Lql}4WF^1I!UC5ui8@ZfK_0{ zEOJKmpj>p!jeg*}7#9cX^{owY5nIA{j&KQxjQ(Ck8OUWf!R7hErtsC5_F8;i!9Ne~ zd%`)lYXL1G&2oGbccB}G4B2l^uO8$4m#M?yW10lO(Op-4%RH3~%pHX&et9&4 ziqTDCRL4y^lA7;BM*1{l`=X4HEk-#flFoG`3?mU0Ei2|}85qtBr`0;*ZbdaM(5^woOt&LKv zBwjiumx&w*J-tThvjc^^mJ$|j>o0-XFSt;I2`07HvWY#+ZNj#1LF_ozCD1SuhBn#A z)(4`?EphIjO0$sly|R(@zN8`R{UIX1g9vJ&3h#=}J=Bb);xA)ntPv%>t&c1e;p$1!*GWx?>C(5A5z$Fb2jf|`o%E)&VZ(5E|S z=?0}@sl6V|LOvc^7o78$e1N5ieMVsTKm=VO#rI<_T#X8iMTz7O`dpk7TpGj392&XZ zdubph(dT?AA_Jq6l(i8fe3ZMIeA& zv?pdj{ek?>v%mxtAklt*2w9y~LfVw1)BAx5V}_$fNo=6zm+r?vETl~1y;#cO^dub~ zQ)COR#$D|LVdTme4Wqr(!FC;0+<~AbTnVGA&R}6w88zGiQG|HD__6}&=uaxTr4&0z z?CMFGSN2uctKqDs*#%oZKh|4hNF-5`6Y=45}?%l3}$obs_8h%#B zO#kWCjU59PbHf!QGNo{`Qzl9lro;rIn8o*aj@~H(<0PqUln=v+c^th%1WvTk^fe^E zo2fs3i6;!F^2H48MD#vOTe${>i_h@;drvIA$AJALNmCOjwHMG+$bBE0;XQj_!aNnu zSIDNKm>EY1O#=W|>;xhWDQwc=O*($+FKul6ViwI*ocYylbuAJBR z!&Rx8FNiaxL9%D6z-U*Q^@a}L6B|VkNy2JBuonrH6pk`BNdL(ovG-f8+{wM$XxcmF zO*v=_Ewr8jqe(a`@6M0~hpcikx-sIcC^E>3#2gy=l1mIbMZi~N8A#HDJ~NCyGyNa# z`K4XDJmh*4?0Oaa|K@MM?ea);M4v_Y9z|N$UpE0 z$qrQbUyPR03)x=k=9n7(2h;yIZ?#l~^y(n~Q{|O7e#KNDP4v<67|P-RI;lE`)OAuf z_kV8_EJmQ$u>5DN^=m`RsgblO!0U(57*E($IA_?22AJKeG#)C2tLk+g|LW=14vPvldQ;1A6JbW3X z!mvuI>+Oap3BJV#Eo~$mMLP|?M(rc_`G~O3jO)2NNAUCilT+AAL0XnVSnF$J5e6NX zYOrWykrIa%5@cf4_`3yS=TMj8pKDfppDypT?XGJf|nk>LoVG%Y<7YrGV@ zXAMI#JlNe~ukl;Ruw2T%A9UjK`!sBwL^EB{8^plmYQhZr~^JCXzc*NDn0RGR(;G+R~U zv}YjT#)-~|7?7vlDb9CN9sUJ;uMZQh2lIb80oyu=DkOc1D{hD@&MZN+D0R=ecMTxK zta)VBlJ0n)V|gF@S&EvdFacF%8XjmCJokO&4FYipq>;Ep5=6gH7A9b-3?l-~zN>MH zG7wO34O4~4q=ZwH z3vB(=Nc?LCHMQN7gAnc^dZPVpJiWnkn{^B;fyH>^-2GdY*=1dLVQN9h6RJ z8UoT$Y6zi)&=HhwK#<-ogx*bP5(EsPBPd`%no1J^kuDttK?MO3M6Bp{!Qb!y{Gazb z=RNN^d-v|lot>S{-r1eIGxsLx!miRj>SpQ8rjeavbxtSnuy?c6zExVO%Pd!Ac1pjB1Isouk*u(N8if$3-WxBp;PA6+uryR(K{uA%fPtOs{er zyJpWOoll` zykD7K%ed|W7Voc8vLNyhy~#zkpuJ%zaih=Qb096$Hy&4kx5TB8uhv?Up@W2z4 z1_t=Co-A-U!!a87FM4c%-_tW=VE_+ILd9z@rhW^=xD-9%=`SoqY8*v z)_JrbKX+JN7ErU?JGd}pqKlCOYzwgRcQvc)bsYy*-8`h*H(y#0GOejd!zUzdFPxu0 ziQQXBr@&u;g{9XNnsKTW)|t?=&ISHoK$$6&<#Z_{g?mGnQ2kwbSis-aLHf8hwfpBw z*y}#7bjaL1=$C`j)-duVM#R2ZcS?yY|F|-pM0Ap?;V2|yy*fR2;Yl+}+7+N}c=ItGjtmxd?*EE(+?cGT z2RRW^JUq$Rz=>qWjZ8A;M!UT8p#wAH4mv%7n#4FQ5pxMsPeDhT$pJ1RB7Z=oiLR0$ z1b)t+R(-wMBa;o1 zpH&pBP9<5D_i@!+UPTY8husraSPjd`)6IJr*?F&QzKkc`_Wfs?I;s!!0nP#L@`1v1 z;$EQCe$mu&Ucu4k{PXC$*+H*Wn{QQP)iz?aPRkTjk0s=?ad`=njg|tGyW?D?8mvkg z%1UkMxN$0H-xi~}{TRb(d>B#2eRQC>L|tL8`2IABbwNseK999pH-iJ7!YQj5M#=)! ztnNY=b*g(`0H3SzrATNpp7AxZ;g41mf-01$Hnh;DhZ*EL)t;EboUt06(bu_X{_2(^ zl0aX3Do1g-vSe93<^Ezdy>DNEVKyp|jACLyCZZmkMT029$=(Xhmt&KzmVP%S>vMmJ z8Xui8qi}j~$xf!=htzcCRM`1ne{#1ej!|)5>ZvGqzkcA~rJ!d8E%&Sf-)xY*OYlpU(;%Qv3@dY`gU_%ZGM7@fEo`*1Nhj zn?;7f6ULfL66g<_#)N9t=4o~c$A=^=z0Kvr)DJ>Gn0*dYQS~=86CMcGP!FY>$N=t{ z=9AU!>@P2>;&eeucC@FuP_7aUK#a-lh&ZPR5V&IKML_Hn>W8%V6G+1wc>_Nj#@1Av z0H!>i&cU&XHtV}e5vCYi<1lmdsB6}Zqw?lO6Ry5p24-wAdsH>7S}*L1g#infY{piw zPP!*Fn-VXbB}3E5S}dJqJvui~I2C9$Su26Yn>@L>e#?n7_slrejOHcsk1vK#LPt&) zSnfpG@f9jgG5Pm7EEzsVE7&dO^152medLRyPxDelS4i*;Q6w8025D^UcNB9`d0*cv zQn17{MsvkLj@Jnl(v@L&6KD^;;I3jui9sW@L9YhkLAF6~=Q_C+y}HHnaU6)G!w6*< z3MjCJ!kkD`dLI7EkwFNTTfV7w{5%9_(fVk6LkwUHSyi&6r{o#BNp zG)(tdZMzt%Vknky(PH@tN=3pqMc=DJXtrpv>)jdy+wq-}gA}-1`&mKw6)imZYb;G) z5)_)la`@&ToQzN`UF@PB(#^>cQb&I%LWytm7EqMgIE3`y=Y4w%vJ3O4NBPf&uzF?V zt~}FyXiZw^W)*fVyPj9_FqQ52W`R3n1y0cl^#qNFpplw`BT9oK-MQzXbrT%Fo<8bq zoBqyRCzvp{^GM8|l=Z9Ux^~`7)D>#fjmS#BdR=+g^k~iFEI(!-Y^l#4)TT_|rtEn+ z&#ZBsWzLD3jT8#8e@0d&a^WzedYu~9of`3@n!4qoOJ)-eP+~@6wu%3(jFkl-nE?qm z#UguNDxOA>2*D1P525<;-u-y#;uG?r19v?G_ZYBrWW$kaT3=9IR8q*Q=F3MQ?t0&R zFhLMUsddD?)q%&JkTG>6d-fu)iK~ySE2UEW)phgqsDza(H%V0ANc?K=Oznqn-HRvB5_=vCa8>bsNccbs zoKCf7&TULF({pQ|_9*2UPr`yym-O64;3M|$a^-mR`@atrV=5|9@Iib~(qc`bX08)g zo?Ov$WAMwYU%y0c8RN1cF29nt+LKWZi{k5)2j!DUrXo*;BFH3 zTi=t!)%?7|&fCVS3u}b~?yB>o`N?v#$8m<&e;M*l=@WxMsTC4prFYJGeUg;ytXFa4 z5cN{06vG(saLFzDT4C1It-FbE4+q8lwx$HVIKy`{`otD}f96a9;`T#y;W;>8U@22V zt-69-+9Ea$d(xOj;xcabv-;bx!l<52U+$+e7->Fa50#O42)5MhZi#-kmJH1q!(w!^ zIs^1#g1-HR;g=93?dzY?mcFqf2@~l+1OmD_h2Eih)~xxZj2}(d8|UhZeRpo?7yKgl z6eZgRE{0v^f#BTvYz6OCjHgVkjNl?{%qSl0;aiDW2Endc?0%WJ!_8UdEQ#rwVpgkb zS$#@nQ^kH~BHGtpi15lsL_aNnql)1u5zCXBmAOZ$;wZKEKBD=!4{X$e7HB}RsY7N{ zESh(wcCKPFF`u8S=V~p=FSC6Gw@$vG&eA9YlErcU(Np6`u}UovZz~uUQ^9+0)`G{V z)?qGf>6L5kb7rc=6&k7t%t?!9vc+8IfFxqAb!f3Y1#N*TrX=zj3ap1DbN~Jrn)F&J zW)euUF_V|BR|byJ6;S2gykXgZZ8))~_b$~=-`c>&yF^`sj+W;mk&4im76mN25HHNF z6QFgf4_oFcQeXk*w_XZcrXs@+xq)EhXCDTHPObOj;*ya^yXZ*N%W>izAe=?7{si=; z?Q5xoD&){6bf6^2Z2}yosNza_b1GCqFKF)@q^bxr^_adnAZlagky)mR*1%N5LQvE5 z%~)o+9{se2 zjHJZXs@UY&HN;P8%!kzH$@!Ni0dofA6^(6+9x0yxxeY-VaH=O@?scZ3UQ)&o)o62O z1slK0`40&6_Hzy> z%4?ua{5{~uoqh;-aZxYvAqFF?8WDB(RXzxQTo&A37JMZz6UaP+Wj@OP7K&)TvVINB zJO~8xzl9gFfv*F(XRzEeKn|o&BY^j$717c9&WRd?1>s;N<-i6TsCm5m$GgBszGWiL z5;9l=87zGnjibWS%0Y^P+HURLJBETWA9UWS#!uGb=%i^ZJy3U1_Z;^?st2`HAv=y!ls8SY4^qroK zYv5;JWrbf?{ZDga+z<;(wE9`Sm2Y&3lS{SCPfKTg?oAfT*mkVSb7$Q*Q+JsctX@Tj z7H(12O&)aZiZPwejmJPi6=*h8sc>%aTN1K?ra%zaBXRxSlcBi|U7m5K@cq<_)iZ{gp%tQl5J;Ob>8`kP3#_$6yr|D#n)c`h${$Aws*$d8 zxFMpL%Xrqd$LfDH?E{L^P|HJP=792=(l(Bva|Z7)KP?HV&T60c$Jq#JrSUrG)IaJ< zyLv3%&sk<5>Rt0GT-C5LiKA`rIFwu5+5l3R4S(hxmq&MR3Y7`X+o=+u{&B!s@UEhpjs0AC74hDZeY@;wt2sc0!uvxCPNF#&=Xy0;HsXfif+ymF&BWV=Yyn zFB3jU^oH7&_^8lYi|How<_9%V0lpft!E;H)L}1H6MQ)08-qZ-j`PxFK>Y_7_vO}+# zqJl2hOZ=fHYEphutx-m$@fIVfP=%f*VQ7(w8Cd<~l}^xU?wT`{*NDqj%lU)poKh&9 zvxFU8h)r5&xw@`k_ipfod4ut{=j$dI^Q8Oegw9x%Nw=TcK4h{D1H1$_m$5*co|j}x z&NWWxV7bSH$W}U4F)~l)$WMSM=P?mF(-`Tg)|HhxTf-TaZ2_W{(Dii_$^Pi-YBpB$ zT|~8_Sb1W)y40!3bYjHW#1PFI3^Xn@$3)iq-T$W}!3C8qX+ZVlQv>XG<-%C0D} zdb0c;8;5UMSQse@E7c#b>y!&1fUu+bt{LVwASPuj%Kk7)%szICOW?fz#|7Go3-6ke2hdeJhgvW&N&|)>Az>r<2Xr!sX#9 z@l$L;_<312j8>nXZSg`Xa!wMN2)wkx zGmgjrr6ep>va8uNos*kC$+LYEbzm&@vy6ObHTb(4d&7ouPHyf9opy}QKC~MDU0r-Z z<-<3!RdTDIRGzbz-w%20T9LEQ+OM-4txrRHDm{*qbx$Rbfb!q`KZXB4^1mtnkMe(5 znPwKfu2Ox-A6_#tz+6Y?ZuBz8F_c$H_n#r6A~YLImSp{RLUDdIkB$`Py?%WC8+nVqo)a!R#XvYWx))w1FlWCy$+6XR#CnrB$?f|0HU z1M+r4Mtig`(6x&g`m_p7N&`^A0YAkd;v_9F$c~44N!}ncEXhfHrTT zd+Ptv7fFflILyql?&RpK+H5h%L09sT7CVJ&Rgc7du~~~9xZ$ehL8Sp!jSu2~+b%k3Xbs=nePgH_l^rB4>2P67P&Y8lf)Mw_fwtq_qv6)H!lJq-R;zpYr<<)@O705BQ#&D+ayCk*{iR2?Rz+@e!7F=*U zYZ^#G?awn8-y%K+mth|r)p5D9eo8I$mQdUCzbyc0!o$U}^H3`%IkN%5>IR!ujVaL)RetG=q#DdJJ zx6i%}#5CyQyy=D%@>7rAuzDV`_v=e&1C^FdGo}=t4)fr3lYWmNN#3^*ex3_1xF54D zg{(h)2g-z&ezsiJ%>6>rx^#a1;Zq=X=QE4(2WhMT>WsvYh4|pz+ZQY+K7O~87(ygY zFxq{6e!2n8tg6r)=B}L*G@8JMV1{S~8nQr!1j1bEEHJ~NEikkL_U&8`)zQ4%lQMpZ z8CcW69zB7C21D_;z$B5R=;054SvdyxqXar?xx$E7Th5H(026R$?ZZ9A#E%o0b+&x{ zhz1Ca3XS}r9Ds3^HA6drm%9JGpt;5e_|^)%VRvY|4^jE^MyTT8ltoyJE1a9IN4ACZYDBr>5)#l{lW zb*GqK-io$If2Zb^JY#62%%IL_hEaG1yD57FzPK0b6vk*e2z)vj2x21y!aTSSx=ZJp$OF%OCU50PfE@!#wU z)++?FF+z5Q^%GN!4QS;va?L9#_~&m8V;G1Gagq%-->JP_ghaTRra0>RA~}#cG9Kd8 zfLSs!u6YjakXSLoj<<8G|4dtfP@sT?>c#9_RUEs=Z5ROaCKGi=AMJzFBUMuZ z62CiOw@fVu^xZh2idOQ?G~#Czn!7X3|4tK;+zCC)rv5olIP~3$`ucEhP!}rvOM9_G=QV^Pr6Mx{6H16I!Y`CsPFDCH3pG6p9m-};Yg(fP zKoS6o4rOxP5+R<96yL)^bX!pua`Rx!;sF-@RCqUzL@l&s@qaU})NT6%Z?jBkRwwgB@Q zF}Y#&?Zox<#Pzkr^?8hgYbnCl!MBXM@gaofvz*ek)4k(^#^dA12`Kz6|ILqN7|cai z0wa~49*zkO#e@bQ=M50vGzo+wm^n;8&vHdOs_KCNs6v&_H^oja?AYfN!;11}w0ZZ2 zb?B0C?x;HKPLS)_Rnpad-1m(5y<^&W(u}RIL9A}g!>>5~s!houoJlTi%UAAPjokQP zDCixUZFULdU~<8rACYlHc&tsD&0=WZUep8IOIB>dWMTX~hiDdKF_Wrjvs)ak9+$%< zWwt;zI^aHk0+CmcqIOI{qv>O@m6F|etY-X2)3r5tT#X+u`tEA9=>Kaz+ zH&{7ZD^Ne8LNFh7_ojt^0hYFzns}R5Sq)UKYK9h2OU$?(*Ke-3T8R&`9%z-tE<)f} zz=CRCx{y+q_A6wT&Ii6@#kREfZbRdbj#DLqk-Jmq4QB2MX`~o;Ii3kKMknhTm#fE_ z1c&yZ84US{NFl;rT^d<&sz@=Ray%<$j6v2jK9^byAm~FgB=8T#?k6Vla@4rhuzD|^ zz2>I>qfoku8$8cMzn!2Tt}mulN-9PVSU|BdxztrBhGO~k1t12{cy~rGU6xXo6tP@A zr3AQW5}M&D2hAA`hdyT7M3pOgndg%%E;^97Ys{>w3&`jdfh{WF?NrkS8UbcyF1^lBfq9m!0G_j`raK;mK{@nFg_{5N2N1t@%jl= z?8>zzg=P?lZ3ovIGxjO`Z|r2G7F$5_ia+Q}n+W}Q8Z@j}%7LsX1TXW9Rws+0$|~L2ZLj5x1hq9r%%FsC@|};R)ol}| zbK*E-C`6XbwRXw#X8-i3YWsPZ!Yr=(I{l-9aY}@iVG4_3tf2)Jr@)`nN-l4&1cZ$g zGnJ@}7oB$rZ&SUcHUug0_vd5&l@^_rjp%M`iG|9e@$jeYy)FtqSiVO@lNOpLMAWps zr3&Zhrv;*yX)=<&sQO;_Eh~CYe^lMw)D1W9$}DaoLQS;A zhgO`*@pi#zye#_m!5Nxd%|~h=8my?F{AKQtC|Hay-!=Eo?i)E|8}@OtY8Qn*xexqc zgE}&fq~0f2cwB_`y_(;#uEcs^8RS{P(kRp%*(WyksS-zKCkaN82SXh7=9h;A7sXe> ztDiG{uO^XX{Np|cQ!hPj?Ge3;mG+P04lxq);jYVN2Cr6=ODIeu!#w8Y<_(y8*ix*N zf1GuQQEJv@WV~|-2|B*3n+b=NO?A<=@z$>9ZA4aRULaCLQ6AK-Y;64!2qbQ{8R5%a1Hz2Bz39JY3Uu$R03xs_60!gV`Oen{}8!^QDBXT2c^ z;?VH)+U?XHpNJq=>=>H9mL+i9el?^ee{De*)wr>fToC^=lt7NvK*e8x zx8R!BWSEh%PvhMTc_EG9(2^^DpZz>;U%I`iv*f%Ze;#@1{EYTeyEOCy@{-U3L=v3E zHzDtWydNr7yluhVFvi|H*iM2vN3~pgHM#vcPPKL=(>KyX@Kr&QTII@G*B^>Kdn_&+ z(~{K`w*UN;74XcDl*3$%WoAjkw3J-eK)X$)lXF|5(%?$Hb-H?7BsV*fXv2K&Aa4M@ zm5H2}UBBhzgFY&STngtzu+muLP7nP05C!;VfxyM?;aNNBH~o*(C*pE9La#@Q&Mvr$ zZYOT8gQXd~rzO{zAf7{p(n~}y`n2c?cZWWE6#}pEflDqAbYP$3aYWI2%(Ju!_V>D0 z

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

NQ6 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 literal 0 HcmV?d00001 diff --git a/research/p104-full-frame-contact/construct.py b/research/p104-full-frame-contact/construct.py new file mode 100644 index 0000000000..416e5f5845 --- /dev/null +++ b/research/p104-full-frame-contact/construct.py @@ -0,0 +1,48 @@ +"""Move one P104 contact to the full frame. + +The two-operand transport identity is standard. The source is PR5544, +PR2305, David Arias's coalesced word and Cinna Davis's private reuse. +Ali Romman with OpenAI Codex assistance. Apache-2.0. +""" +from copy import deepcopy +import local as L + + +def construct(source): + word = deepcopy(source) + old = source['program'] + expected = { + 16798: ['MOVE', 345, 739, 240, False], + 16799: ['ADD', 341, 345, '-1', 240], + 16800: ['SCALE', 341, '-1', 240], + 17061: ['MOVE', 341, 240, 127, False], + 17067: ['MOVE', 345, 240, 127, False], + } + L.need(all(old[i] == e for i,e in expected.items()), 'Exact source contact') + L.need(source['frames'][739] == [30,70,429], 'Source three-plane') + L.need(source['frames'][240] == [13,19,70,416], 'Source four-plane') + L.need(source['frames'][127] == [1,2,4,8,16,32,64,128,256], 'Full frame') + for role, end in ((341,17061),(345,17067)): + touched = [] + for i in range(16798,end): + e = old[i] + used = e[1:3] if e[0] in ('ADD','COPY') else e[1:2] + if role in used: + touched.append(i) + L.need(touched == ([16799,16800] if role == 341 else [16798,16799]), + 'No intervening read or write') + replacement = { + 16798: [['MOVE',341,240,127,False], ['MOVE',345,739,127,False]], + 16799: [['ADD',341,345,'-1',127]], + 16800: [['SCALE',341,'-1',127]], + 17061: [], + 17067: [], + } + word['program'] = [e for i,old_event in enumerate(old) + for e in replacement.get(i,[deepcopy(old_event)])] + # Scalar coefficients and their order are equal in both words. + def scalars(program): + return [e[:-1] for e in program if e[0] != 'MOVE'] + L.need(scalars(word['program']) == scalars(old), 'Same scalar and owned word') + L.need(len(word['program']) == len(old)-1 == 25310, 'One fewer paid event') + return word diff --git a/research/p104-full-frame-contact/pricing.py b/research/p104-full-frame-contact/pricing.py new file mode 100644 index 0000000000..c88c425a2f --- /dev/null +++ b/research/p104-full-frame-contact/pricing.py @@ -0,0 +1,154 @@ +"""Complete mixed-target price, compiler and outer transfer. + +The interval and compiler bounds follow zxv and Cao Yifan. The productive +recursion is by Jacob Alan Sussman. The controller is by Cinna Davis. +Adapted from PR5544 for the H1+H5 to H6 contact change. +Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +""" +from collections import Counter +from fractions import Fraction as Q +import local as L + +KAPPA, TESTED = Q('.00304117'), Q('.003041171') +PREVIOUS = Q('.00304057') + + +def encode(x): + if isinstance(x,Q): + return str(x) + if isinstance(x,dict): + return {str(k):encode(v) for k,v in x.items()} + if isinstance(x,(list,tuple)): + return [encode(v) for v in x] + return x + + +def assemble(local, native, word, physical): + paid, targets = Counter(), Counter() + counts = Counter() + L.need(local['helpers'] == native['helpers'], 'Every productive helper has a native target') + for e in word['physical_events']: + counts[e[0]] += 1 + if e[0] == 'LOCAL': + L.need(e[3] is False, 'Every source invocation is forward') + paid.update(local['paid']) + targets.update(local['helpers']) + elif e[0] == 'QUERY_SHEAR': + paid[1] += 104 + elif e[0] == 'IDLE': + paid[8*len(e[2])] += 208 + main = Counter() + idle = Counter({8*len(e[2]):0 for e in word['physical_events'] if e[0] == 'IDLE'}) + for e in word['physical_events']: + if e[0] == 'IDLE': + idle[8*len(e[2])] += 208 + L.need(idle == physical['whole_idle_jobs'], 'Every whole idle has a native Gaussian and full rank') + for term in word['diagonal']: + main[1+8*sum(term[1:])] += 104 + L.need(main == physical['main_targets'], 'Every main target has its full native phase') + targets.update(main) + L.need(counts['LOCAL'] == 18 and counts['QUERY_SHEAR'] == counts['IDLE'] == 15, 'Complete call census') + # Recount by the two path lengths, without using emitted main diagonals. + second_t = Counter({r:18*n for r,n in local['helpers'].items()}) + second_p = Counter({r:18*n for r,n in local['paid'].items()}) + second_t[145] += 208 + second_p[1] += 15*104 + for length in (7,8): + for j in range(1,length+1): + second_t[1+8*(j+1)] += 208 + second_p[8*(j+1)] += 208 + L.need((targets,paid) == (second_t,second_p), 'Independent full invoice') + L.need(max(targets) == 145 and max(paid) == 72, 'Maximum recursive ranks') + L.need(sum(targets.values()) == 12814 and sum(paid.values()) == 69912, 'Complete field and call counts') + L.need(sum(r*n for r,n in targets.items())-sum(r*n for r,n in paid.items()) == 760, 'Complete rank surplus') + return targets,paid,counts + + +def run(local,native,word,physical): + T,P,counts = assemble(local,native,word,physical) + E = L.load(L.ROOT/'research/higher-moment-strictification/verify.py','p104_productive_intervals') + other = L.load(L.ROOT/'research/kappa-rebuild/architecture/mixed_target_probe.py','p104_productive_second_intervals') + def margin(k): + a,b = E.moment(T,1-k), E.moment(P,1-k) + return a[0]-b[1],a[1]-b[0] + lo,hi,grid = 0,10**12,10**14 + while hi-lo > 1: + m=(lo+hi)//2 + if margin(Q(m,grid))[0] > 0: + lo=m + else: + hi=m + lower,upper = Q(lo,grid),Q(hi,grid) + L.need(margin(lower)[0] > 0 and margin(upper)[1] < 0, 'Strict rational crossing enclosure') + L.need(PREVIOUS < KAPPA < TESTED < lower and margin(PREVIOUS)[0] > 0, 'Changed complete bill improves selected kappa') + t,u,v,c,b = 1-TESTED,Q(1,5),1024,17,18 + target,paid = E.moment(T,t),E.moment(P,t) + tl,th = other.moment(T,TESTED) + pl,ph = other.moment(P,TESTED) + L.need(tl > ph and max(tl,target[0]) <= min(th,target[1]) and max(pl,paid[0]) <= min(ph,paid[1]), 'Two exact moment engines') + alpha = E.divide(paid,target) + gamma = E.divide(E.moment(P,t+u),E.mul(E.power(c,u),target)) + delta = E.divide((Q(sum(T.values())*b),)*2,E.mul(E.power(c,TESTED),target)) + reserve,decay = Q(1,10**10),Q(97,100) + L.need(alpha[1] < 1-reserve and gamma[1] < decay and delta[1] < decay, 'All three charged tail ratios') + L.need(decay**128 < Q(1,16), 'Both tail decay blocks') + normalized = 1/(1+v*reserve)+Q(4,2**32) + L.need(normalized < 1 and c**64 < b**63, 'Full completion, splitting and rounding charges') + theta,power = Q(63,64),1000 + eta = E.scale(E.power(145,-v*TESTED),t) + L.need(2*(c**v)**64 <= (145**v)**63 and eta[0] > theta**power, 'Shifted exits and complement capacity') + L.need(E.power(145,v*TESTED)[1] < 2**power, 'Compiler initial range') + gap = (TESTED-KAPPA)/7 + L.need(gap.numerator == 1, 'Exact compiler integer grid') + step = gap.denominator + def wins(j): + return (step*j+1)**power < 2**j + left,right=1,2 + while not wins(right): + left,right=right,2*right + while right-left > 1: + m=(left+right)//2 + if wins(m): + right=m + else: + left=m + H=step*right + L.need(H > 8*v and wins(right) and not wins(right-1), 'Finite uniform threshold with predecessor rejection') + local_routes = (sum(local['paid'].values())+native['helper_normalizers']+native['main_adapters']+4*104+4*local['owned_lifetimes'])*1000 + L.need(local['real_scalar_allowance']+local_routes < 10**7, 'Every local scalar, route and owned operation is funded') + boundary = sum(len(word['boundaries'][side+'_program']) for side in ('left','right')) + raw = 18*10**7 + 15*1664 + 32*104*(len(word['physical_events'])+boundary) + raw += 32*104*(26+1000) + L.need(raw < 10**9, 'Complete nonrecursive raw bound') + bit = L.read(L.ROOT/'research/query-thinned-controllers/RESULT.json')['ordinary_BIT'] + atom = Q(bit['atom']) + ordinary=(1-atom)*Q(bit['after_cover'])+atom*Q('.0000384599') + admitted=Q(bit['admitted']) + L.need(atom > ordinary > admitted > TESTED and atom < 1-ordinary, 'Retained BIT admission and stock') + outer_module=L.load(L.ROOT/'research/pr4359-p7-padding/dependencies/compiler-refill/endpoint.py','p104_productive_outer') + params={'kappa':KAPPA,'tested_saving':TESTED,'complex_uniform_saving':KAPPA+6*gap, + 'b':KAPPA+5*gap,'a':KAPPA+4*gap,'q':KAPPA+3*gap,'bit_saving':admitted, + 'epsilon':1-gap,'beta':1-3*gap,'r0':gap/10,'stop':gap,'layout':gap,'d':gap} + outer=outer_module.ledger(params) + outer['functional_checks']['actual_new_BIT_stock_sublinear']=params['beta']*(1-atom) + L.need(len(outer['strict_checks']) == 54 and len(outer['functional_checks']) == 4, 'Complete outer predicate inventory') + L.need(all(x > 0 for key in ('strict_checks','functional_checks') for x in outer[key].values()), 'All outer inequalities strict') + wrong_cutoff = E.divide((Q(sum(T.values())*21),)*2,E.mul(E.power(20,TESTED),target)) + L.need(wrong_cutoff[0] > 1, 'Old cutoff fails with this helper inventory') + bad=outer_module.ledger(dict(params,bit_saving=Q('.0027'))) + L.need(any(x <= 0 for x in bad['strict_checks'].values()), 'Insufficient BIT contract rejected') + return encode({'kappa':KAPPA,'kappa_decimal':'.00304117','previous_open_pr5544':PREVIOUS,'gain':KAPPA-PREVIOUS, + 'relative_gain_percent':100*(KAPPA/PREVIOUS-1),'raw_root_interval':[lower,upper], + 'raw_headroom':[lower-KAPPA,upper-KAPPA],'margin_at_previous':E.display(margin(PREVIOUS)), + 'targets':T,'paid':P,'productive_fields':sum(T.values()),'paid_calls':sum(P.values()), + 'rank_mass_surplus':760,'full_forward_calls':18,'query_shears':15,'whole_idle_jobs':3120, + 'strictification':{'tested':TESTED,'power':v,'cutoff':c,'floor':b,'tail_offset':u,'reserve':reserve, + 'alpha':E.display(alpha),'gamma':E.display(gamma),'delta':E.display(delta),'normalized_paid_upper':normalized}, + 'compiler':{'theta':theta,'logarithm_power':power,'eta':E.display(eta),'gap':gap,'H':H,'N':'2^'+str(H), + 'integer_test_exponent':right,'uniform_saving':params['complex_uniform_saving'],'word_materialized':False}, + 'nonrecursive':{'local_scalar':local['real_scalar_allowance'],'local_routes':local_routes, + 'raw_scalar_upper':raw,'raw_budget':10**9,'peak_owned_fields':1, + 'fixed_scalar_growth_bound':'At most 2^(16*26000) before native factors; a declared constant, not an attained norm.', + 'tensor_native_growth_bound':'Each rank-r Gaussian has row l1 norm at most 2^(rf); sum of local ranks is 5894.'}, + 'ordinary_BIT':bit,'outer':outer, + 'negative_controls':{'old_cutoff':'Rejected by completion-tail ratio greater than one','old_BIT':'Rejected by outer inequalities'}}) diff --git a/research/p104-full-frame-contact/verify.py b/research/p104-full-frame-contact/verify.py new file mode 100644 index 0000000000..fb2d7f1a31 --- /dev/null +++ b/research/p104-full-frame-contact/verify.py @@ -0,0 +1,117 @@ +"""Check the contact, complete native caller and conditional kappa gain. + +Source interpreters and caller are immutable PR5544 dependencies. +Ali Romman with OpenAI Codex assistance. Apache-2.0. +""" +import argparse +from collections import Counter +from copy import deepcopy +from hashlib import sha1, sha256 +import gzip +import json +from pathlib import Path +import sys + +sys.dont_write_bytecode = True +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] +SOURCE = ROOT/'research/p104-productive-controller' + + +def need(ok, why): + if not ok: + raise ValueError(why) + + +def authenticate(): + rows = json.loads((HERE/'SOURCES.json').read_bytes())['files'] + count = 0 + for row in rows: + if row['usage'] == 'input': + raw = (ROOT/row['path']).read_bytes() + need(sha256(raw).hexdigest() == row['sha256'], 'Changed source: '+row['path']) + need(sha1(b'blob '+str(len(raw)).encode()+b'\0'+raw).hexdigest() == row['git_blob'], + 'Source Git object: '+row['path']) + count += 1 + return count + + +def rejected(action): + try: + action() + except ValueError as error: + return str(error) + raise ValueError('A semantic control was accepted') + + +def run(): + pins = authenticate() + sys.path[:0] = [str(HERE),str(SOURCE)] + import local as L + import caller as C + import construct as R + import pricing as P + source = L.construct() + need(source == L.read(SOURCE/'WORD.json.gz'), 'Exact reconstructed PR5544 source') + baseline = L.replay(source) + word = R.construct(source) + local = L.replay(word) + columns = L.reverse_columns(word) + need(local['helpers'] == baseline['helpers'], 'All helper targets retained') + delta = Counter(local['paid']) + delta.subtract(baseline['paid']) + need({r:n for r,n in delta.items() if n} == {1:-1,5:-1,6:1}, 'Exact local paid delta') + print('PASS source, scalar endpoint, dense reverse columns and H1+H5 to H6',flush=True) + native = L.native(word) + controller = C.construct() + need(controller == L.read(SOURCE/'CONTROLLER.json'), 'Same literal caller') + physical = C.physical(controller,word) + print('PASS every native map, all productive targets and physical caller',flush=True) + costs = P.run(local,native,controller,physical) + controls = C.controls(controller) + bad = deepcopy(word) + event = next(e for e in bad['program'] if e == ['MOVE',345,739,127,False]) + event[3] = 240 + controls['one_operand_only'] = rejected(lambda:L.replay(bad)) + bad = deepcopy(word) + event = next(e for e in bad['program'] if e == ['ADD',341,345,'-1',127]) + event[3] = '1' + controls['wrong_contact_sign'] = rejected(lambda:L.replay(bad)) + bad = deepcopy(source) + bad['program'][16801] = ['ADD',400,341,'1',240] + controls['intervening_source_read'] = rejected(lambda:R.construct(bad)) + bad = deepcopy(local) + bad['paid'][1] -= 1 + controls['uncharged_call'] = rejected(lambda:P.assemble(bad,native,controller,physical)) + result = {'status':'PASS_P104_CONTACT_COMPLETE_KAPPA_00304117', + 'source_inputs_authenticated':pins,'local_paid_delta':{1:-1,5:-1,6:1}, + 'complete_paid_delta':{1:-18,5:-18,6:18}, + 'local':local,'separate_columns':columns,'native':native, + 'physical_caller':physical,'complete_cost':costs,'negative_controls':controls, + 'limits':['The five framework assumptions of PR5544 remain.', + 'The uniform compiler word and complete rounded multiplier are not materialized.', + 'No independent human or proof-kernel acceptance is claimed.']} + return P.encode(result),word + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--write',action='store_true') + args = parser.parse_args() + result,word = run() + for name,data in (('RESULT.json',result),('WORD.json.gz',word)): + path = HERE/name + if args.write: + raw = (json.dumps(data,sort_keys=True,indent=None if name.endswith('.gz') else 2)+'\n').encode() + path.write_bytes(gzip.compress(raw,mtime=0) if name.endswith('.gz') else raw) + else: + raw = path.read_bytes() + need(json.loads(gzip.decompress(raw) if name.endswith('.gz') else raw) == data, + 'Exact saved artifact: '+name) + print(result['status']) + print(json.dumps({k:result['complete_cost'][k] for k in + ('kappa','gain','raw_root_interval','productive_fields','paid_calls')},sort_keys=True)) + + +if __name__ == '__main__': + main() From 18968423711fd902aaee1099979497d55603e1dc Mon Sep 17 00:00:00 2001 From: Ali Romman <226877337+aliromman@users.noreply.github.com> Date: Sun, 25 Oct 2026 04:18:29 -0500 Subject: [PATCH 3/3] Record cold replay and fixed-invoice ceiling evidence --- research/p104-full-frame-contact/PROOF.md | 20 ++++++++++++++ .../p104-full-frame-contact/VALIDATION.md | 26 +++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/research/p104-full-frame-contact/PROOF.md b/research/p104-full-frame-contact/PROOF.md index 72ddd775dc..013734fb2c 100644 --- a/research/p104-full-frame-contact/PROOF.md +++ b/research/p104-full-frame-contact/PROOF.md @@ -118,6 +118,26 @@ The claimed endpoint is below the new crossing by between The stated endpoint gain `.00000060` also reflects the different safety margins below the two crossings; it is not the exact raw-root difference. +This mixed-target caller is outside the historical fixed-rank packing model +in `research/complex-local-word-ceiling/ceiling.py`. It retains independent +productive helpers and targets of unequal ranks, rather than one target rank +and the old hosted coverage law. The replacement bound is the exact crossing +of this complete fixed invoice. The endpoint attains between +99.9999402697% and 99.9999402701% of that crossing. + +For this invoice the crossing is unique for `0 < kappa < 1`. To see this, +put `t=1-kappa` and divide its signed moment by `6^t`. The signed coefficients +at ranks 1 through 6 are negative; those at ranks 7 through 9 are positive. +Each of these normalized terms increases with t, except the constant rank-six +term. The other terms are 416 copies of `((r+1)/6)^t-(r/6)^t` for +`r=16,24,...,64`, 208 copies at r=72, and `208*(145/6)^t`. +They also increase for `t >= 0`: the derivative of each difference is positive +because `x^t*log(x)` increases for `x > 1`. The full normalized moment is +strictly increasing. Its values at t=0 and t=1 have opposite signs, since +the count difference is -57,098 and the rank surplus is 760. Thus the upper +crossing endpoint bounds the saving allowed by this fixed invoice. It does +not bound a changed word, caller, target contract or invoice. + The local scalar program is unchanged. There is one fewer native call and no new owned field. Native ranks stay at most nine locally; complete maximum target and child ranks stay 145 and 72. The source's finite bound of fewer diff --git a/research/p104-full-frame-contact/VALIDATION.md b/research/p104-full-frame-contact/VALIDATION.md index 6997ff73a4..f3237c2334 100644 --- a/research/p104-full-frame-contact/VALIDATION.md +++ b/research/p104-full-frame-contact/VALIDATION.md @@ -47,8 +47,30 @@ The earlier source PR5544 also passed its own at the pinned head. That run does not test this new change. Publication checks: registered normal and optimized replay, metadata/pins -and whitespace checks passed. Committed-byte and export checks follow below. -Hosted status for the new contribution is separate from local validation. +and whitespace checks passed. The committed-byte check passed for all 33 +package and declared input files at scientific commit +`bea205d91409506c794ababd81454ca42450d5d2`. The committed export and its +separate integrity check passed. + +The export then passed an optimized replay in a fresh directory without Git. +The environment had an empty PATH and no inherited Python or Git variables. +All exported files were read-only. The command used the absolute Python path +with `-I -O -B research/p104-full-frame-contact/verify.py`. It finished in +72.75 seconds. All 34 files, including the export manifest, kept the same +bytes and modes. A separate altered-source control failed at authentication +before source imports, with no scientific output. + +The fixed-invoice decomposition in PROOF.md was checked against the complete +saved histograms. Exact rational division also checked the stated fraction +of the crossing attained by the endpoint. This is a bound for this invoice, +not the historical fixed-rank packing model or other constructions. + +The optional full source-history preflight was attempted. It stopped because +this checkout is shallow, so no full-history pass is claimed. Direct Git +ancestry checks passed for canonical main and the immediate predecessor. +All declared source bytes and Git blob identities passed authentication and +the Git-free replay. Hosted status for this contribution is separate from +local validation. The five inherited framework assumptions remain. Independent human review, formal-kernel verification, the enormous uniform compiler word and the full