From 4fa65976daad6b5d603f925f920121022b819201 Mon Sep 17 00:00:00 2001 From: Chris R Date: Mon, 26 Oct 2026 16:15:48 +1100 Subject: [PATCH] Certify one source-pinned contact chart obstruction without new kappa --- .../INPUTS.json | 29 + .../p104-chart-contact-obstruction/LICENSE | 201 +++++ .../p104-chart-contact-obstruction/NOTICE | 17 + .../PORTABLE.json | 133 +++ .../p104-chart-contact-obstruction/PROOF.md | 17 + .../p104-chart-contact-obstruction/README.md | 48 ++ .../SOURCES.json | 95 +++ .../p104-chart-contact-obstruction/TASK.json | 61 ++ .../VERIFY.json | 30 + .../p104-chart-contact-obstruction/check.py | 382 +++++++++ .../evidence/CORE-ADAPTATION.diff | 11 + .../evidence/GUARD-RECEIPT.json | 13 + .../evidence/ORIGINAL-REQUEST.json | 42 + .../evidence/PAIR-RECEIPT.json | 30 + .../evidence/POST-REVIEW.json | 93 +++ .../evidence/PUBLICATION-CONTEXT.json | 15 + .../evidence/RESULT-normal.json | 1 + .../evidence/RESULT-optimized.json | 1 + .../evidence/STATIC-REVIEW.json | 17 + .../evidence/original-check.py | 382 +++++++++ .../source/NOMINATION.json | 56 ++ .../source/PROOF.md | 176 ++++ .../source/RESULT.json | 766 ++++++++++++++++++ .../source/SOURCES.json | 121 +++ .../source/WITNESS.json | 16 + .../source/WORD-CUSTODY.json | 6 + .../source/WORD.json.gz | Bin 0 -> 107909 bytes .../source/construct.py | 130 +++ .../source/local-grammar.py | 208 +++++ .../source/patterns.py | 74 ++ .../source/verify.py | 143 ++++ .../p104-chart-contact-obstruction/verify.py | 84 ++ 32 files changed, 3398 insertions(+) create mode 100644 research/p104-chart-contact-obstruction/INPUTS.json create mode 100644 research/p104-chart-contact-obstruction/LICENSE create mode 100644 research/p104-chart-contact-obstruction/NOTICE create mode 100644 research/p104-chart-contact-obstruction/PORTABLE.json create mode 100644 research/p104-chart-contact-obstruction/PROOF.md create mode 100644 research/p104-chart-contact-obstruction/README.md create mode 100644 research/p104-chart-contact-obstruction/SOURCES.json create mode 100644 research/p104-chart-contact-obstruction/TASK.json create mode 100644 research/p104-chart-contact-obstruction/VERIFY.json create mode 100644 research/p104-chart-contact-obstruction/check.py create mode 100644 research/p104-chart-contact-obstruction/evidence/CORE-ADAPTATION.diff create mode 100644 research/p104-chart-contact-obstruction/evidence/GUARD-RECEIPT.json create mode 100644 research/p104-chart-contact-obstruction/evidence/ORIGINAL-REQUEST.json create mode 100644 research/p104-chart-contact-obstruction/evidence/PAIR-RECEIPT.json create mode 100644 research/p104-chart-contact-obstruction/evidence/POST-REVIEW.json create mode 100644 research/p104-chart-contact-obstruction/evidence/PUBLICATION-CONTEXT.json create mode 100644 research/p104-chart-contact-obstruction/evidence/RESULT-normal.json create mode 100644 research/p104-chart-contact-obstruction/evidence/RESULT-optimized.json create mode 100644 research/p104-chart-contact-obstruction/evidence/STATIC-REVIEW.json create mode 100644 research/p104-chart-contact-obstruction/evidence/original-check.py create mode 100644 research/p104-chart-contact-obstruction/source/NOMINATION.json create mode 100644 research/p104-chart-contact-obstruction/source/PROOF.md create mode 100644 research/p104-chart-contact-obstruction/source/RESULT.json create mode 100644 research/p104-chart-contact-obstruction/source/SOURCES.json create mode 100644 research/p104-chart-contact-obstruction/source/WITNESS.json create mode 100644 research/p104-chart-contact-obstruction/source/WORD-CUSTODY.json create mode 100644 research/p104-chart-contact-obstruction/source/WORD.json.gz create mode 100644 research/p104-chart-contact-obstruction/source/construct.py create mode 100644 research/p104-chart-contact-obstruction/source/local-grammar.py create mode 100644 research/p104-chart-contact-obstruction/source/patterns.py create mode 100644 research/p104-chart-contact-obstruction/source/verify.py create mode 100644 research/p104-chart-contact-obstruction/verify.py diff --git a/research/p104-chart-contact-obstruction/INPUTS.json b/research/p104-chart-contact-obstruction/INPUTS.json new file mode 100644 index 0000000000..fbeb2b832f --- /dev/null +++ b/research/p104-chart-contact-obstruction/INPUTS.json @@ -0,0 +1,29 @@ +{ + "files": { + "source/NOMINATION.json": "1ed0204a8a20b54cfb82d8873e8c4cd46d2b83da85f9b2ff4baf7270d59a0a3e", + "source/PROOF.md": "18088012842ae0ef1d120dd7681aa8ec064f8ed7ecc457f909ff2dc49f010745", + "source/RESULT.json": "6131855481874f4ad273bd13ac3c8a577eed41754c28c07a2fe645406db604b4", + "source/SOURCES.json": "6d3fa5d28d1022703dd853b107e700664f88203e3b7858fc92b48e45b3744367", + "source/WITNESS.json": "12085b340d4d3ef76a70e4c92b6188c4e6eb6962815cc3e5d1da009ca52abb48", + "source/WORD-CUSTODY.json": "6ed7b3b0bbdde6a8d30297832f512799c3fbc5f0d6e447fbc4049855b4dfa7a7", + "source/WORD.json.gz": "9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6", + "source/construct.py": "485eefe102fa94de58512d4a05f437a4213ff8b7e1fd8bed45824af374f9d4c3", + "source/local-grammar.py": "716d01a342467f87b14d67853d8de30740f9f2fa881afe271db0df5ef8b19697", + "source/patterns.py": "2fc9452ac1740998ad2a5ef71ce9fbb3e08133a89e06e744a6cc3258a02faaa4", + "source/verify.py": "474315b0bad561db8d98583491c326a04f5ea33ba40a2439fca420fe5200406b" + }, + "git_blobs": { + "source/PROOF.md": "5eab6148f782d11cc5d8d0ec923997fb81bf94f8", + "source/RESULT.json": "1b54419bd2ebbe69f81c6efc64f2359839be2c43", + "source/SOURCES.json": "2a5c2b8015ece09e4788b7742d1351aa87545299", + "source/WITNESS.json": "4671283b4fa00fe444cd61353863d14b0e7ac774", + "source/construct.py": "1207c370448732436e5dd697c6309a71a27a9075", + "source/local-grammar.py": "e72cb02dba9b68d3bd5934371b5d25a44589c482", + "source/patterns.py": "75ca00f9e1d30bc5b2c9305606f5b8a97fb66174", + "source/verify.py": "93ba8c1769b90103307c4f1196f3a78d9ab7e017" + }, + "nomination": "source/NOMINATION.json", + "source_result": "source/RESULT.json", + "word": "source/WORD.json.gz", + "word_custody": "source/WORD-CUSTODY.json" +} diff --git a/research/p104-chart-contact-obstruction/LICENSE b/research/p104-chart-contact-obstruction/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/p104-chart-contact-obstruction/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/p104-chart-contact-obstruction/NOTICE b/research/p104-chart-contact-obstruction/NOTICE new file mode 100644 index 0000000000..d59bfa2cb7 --- /dev/null +++ b/research/p104-chart-contact-obstruction/NOTICE @@ -0,0 +1,17 @@ +P104 fixed chart-contact obstruction +Apache-2.0; see LICENSE. + +The source construction, word, proof and published verification are Ali Romman's +[PR #5660](https://github.com/CrocSwap/integer-mult-bounds/pull/5660), prepared with substantial OpenAI Codex assistance. construct.py credits +the A2 identity from [PR #3998](https://github.com/CrocSwap/integer-mult-bounds/pull/3998) and [PR #4019](https://github.com/CrocSwap/integer-mult-bounds/pull/4019), zxv's [PR #5643](https://github.com/CrocSwap/integer-mult-bounds/pull/5643) and the helper relations of +[PR #5644](https://github.com/CrocSwap/integer-mult-bounds/pull/5644). The retained local grammar credits Ali Romman's [PR #5544](https://github.com/CrocSwap/integer-mult-bounds/pull/5544) and [PR #5545](https://github.com/CrocSwap/integer-mult-bounds/pull/5545), +David Arias's word, Cinna Davis's private reuse and Gareth Davidson's composition. +The source word/controller/native/compiler/precision lineage remains credited +by the original published source manifest and notices; no ownership is claimed +for these predecessor constructions. + +The source-bound two-role extraction and independently reviewed qualification, +readable obstruction proof and portable packaging were prepared for +Chris R (Clear1nsight) with substantial OpenAI Codex assistance. The underlying +methods are classical exact binary subspace inclusion and rational bounds. +Vendored source notices are retained verbatim. No source module is imported. diff --git a/research/p104-chart-contact-obstruction/PORTABLE.json b/research/p104-chart-contact-obstruction/PORTABLE.json new file mode 100644 index 0000000000..eb6ed6c8b2 --- /dev/null +++ b/research/p104-chart-contact-obstruction/PORTABLE.json @@ -0,0 +1,133 @@ +{ + "core_adaptation": "Exactly ROOT=HERE.parents[2] changed to ROOT=HERE; all scientific logic unchanged.", + "original_checker_sha256": "b296855175e7d2cf84bbab07696b6b5b9589ffe4e1a9060174bb6d796f065304", + "original_result_sha256": "41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4", + "payloads": { + "INPUTS.json": { + "bytes": 1814, + "sha256": "85419fd7ab7b09132f1b7e6d41d39832d715a626ada03c8b243dfa87346ddf53" + }, + "LICENSE": { + "bytes": 11357, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + "NOTICE": { + "bytes": 1478, + "sha256": "81e10a79b0a4edf9c775fa2b8c5c35513d3f92a7ec998743e2dd94c54a160e3a" + }, + "PROOF.md": { + "bytes": 2789, + "sha256": "68b9da6363e6bb874f0531c5912bcfbe07eb3c99227c04b7dc14c99ec5d8ed9f" + }, + "README.md": { + "bytes": 6826, + "sha256": "942eb876d941ef3b1b1cc657251de82db61ef272369ee830595b6b2731abbd38" + }, + "SOURCES.json": { + "bytes": 5680, + "sha256": "a74869a4555b4761e99f9fce514bc2d7915c5dee222ec0b25b3472133dfd73f9" + }, + "TASK.json": { + "bytes": 4874, + "sha256": "56e74ff9581aadad4c2b8faf90773f6cc8e7b14613a95b9655608298428a0595" + }, + "VERIFY.json": { + "bytes": 993, + "sha256": "7eee692f85bf3fcd7c6db893ed78b1ac148719eea93c01bf46f7ac11c3cfbb67" + }, + "check.py": { + "bytes": 22542, + "sha256": "2ae844d756908ee193689ccdff748fe78fa992e168cbd5bdb29542fd4a8ffe66" + }, + "evidence/CORE-ADAPTATION.diff": { + "bytes": 327, + "sha256": "9cb54ef00754cfb9c5870317850f41e4b591101ec9a86d61ef10c2ed69df11b0" + }, + "evidence/GUARD-RECEIPT.json": { + "bytes": 516, + "sha256": "7afb33e6007ea0a1c74c8cae3ea76af2228015ec558ad82ca46a148309729464" + }, + "evidence/ORIGINAL-REQUEST.json": { + "bytes": 1627, + "sha256": "ff437313e4fb51acbbb42fc70d8d2b98af59bd0bb94ad601b3545812378213dd" + }, + "evidence/PAIR-RECEIPT.json": { + "bytes": 1363, + "sha256": "7453eb5d8f6eb45c2dede2a5492ac893cd0d80ef051c5943c1120d513f465f92" + }, + "evidence/POST-REVIEW.json": { + "bytes": 2573, + "sha256": "0a11e4e2c6e4f3c3b7b094652503af19dae60bcfc5355adc78d98a349ecc0c2d" + }, + "evidence/PUBLICATION-CONTEXT.json": { + "bytes": 830, + "sha256": "902dbaf69ce8683931e3dfcfac74e337198946699ebbe2b7cf99f6dd6c6707ed" + }, + "evidence/RESULT-normal.json": { + "bytes": 33425, + "sha256": "41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4" + }, + "evidence/RESULT-optimized.json": { + "bytes": 33425, + "sha256": "41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4" + }, + "evidence/STATIC-REVIEW.json": { + "bytes": 815, + "sha256": "3d2342165ae8cbea7a8457aaead2d1759a0bb702d1b5e3fc99e3418028133a51" + }, + "evidence/original-check.py": { + "bytes": 22553, + "sha256": "b296855175e7d2cf84bbab07696b6b5b9589ffe4e1a9060174bb6d796f065304" + }, + "source/NOMINATION.json": { + "bytes": 867, + "sha256": "1ed0204a8a20b54cfb82d8873e8c4cd46d2b83da85f9b2ff4baf7270d59a0a3e" + }, + "source/PROOF.md": { + "bytes": 7801, + "git_blob": "5eab6148f782d11cc5d8d0ec923997fb81bf94f8", + "sha256": "18088012842ae0ef1d120dd7681aa8ec064f8ed7ecc457f909ff2dc49f010745" + }, + "source/RESULT.json": { + "bytes": 18502, + "git_blob": "1b54419bd2ebbe69f81c6efc64f2359839be2c43", + "sha256": "6131855481874f4ad273bd13ac3c8a577eed41754c28c07a2fe645406db604b4" + }, + "source/SOURCES.json": { + "bytes": 5807, + "git_blob": "2a5c2b8015ece09e4788b7742d1351aa87545299", + "sha256": "6d3fa5d28d1022703dd853b107e700664f88203e3b7858fc92b48e45b3744367" + }, + "source/WITNESS.json": { + "bytes": 384, + "git_blob": "4671283b4fa00fe444cd61353863d14b0e7ac774", + "sha256": "12085b340d4d3ef76a70e4c92b6188c4e6eb6962815cc3e5d1da009ca52abb48" + }, + "source/WORD-CUSTODY.json": { + "bytes": 214, + "sha256": "6ed7b3b0bbdde6a8d30297832f512799c3fbc5f0d6e447fbc4049855b4dfa7a7" + }, + "source/WORD.json.gz": { + "bytes": 107909, + "git_blob": "9e68b7de6bfc23bc4fe9940c718dba350ba8a893", + "sha256": "9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6" + }, + "source/construct.py": { + "bytes": 5311, + "git_blob": "1207c370448732436e5dd697c6309a71a27a9075", + "sha256": "485eefe102fa94de58512d4a05f437a4213ff8b7e1fd8bed45824af374f9d4c3" + }, + "source/local-grammar.py": { + "bytes": 9392, + "git_blob": "e72cb02dba9b68d3bd5934371b5d25a44589c482", + "sha256": "716d01a342467f87b14d67853d8de30740f9f2fa881afe271db0df5ef8b19697" + }, + "source/patterns.py": { + "bytes": 2753, + "git_blob": "75ca00f9e1d30bc5b2c9305606f5b8a97fb66174", + "sha256": "2fc9452ac1740998ad2a5ef71ce9fbb3e08133a89e06e744a6cc3258a02faaa4" + } + }, + "schema": "p104-fixed-chart-portable-inventory/v1", + "scope": "Only public scientific source, results and sanitized provenance; runtime input closure is package-local. Verifier and this inventory are pinned by the root request and committed-byte check." +} diff --git a/research/p104-chart-contact-obstruction/PROOF.md b/research/p104-chart-contact-obstruction/PROOF.md new file mode 100644 index 0000000000..6e87ee6e88 --- /dev/null +++ b/research/p104-chart-contact-obstruction/PROOF.md @@ -0,0 +1,17 @@ +# Why this one chart retag fails + +The authenticated emitted word of Ali Romman's [PR #5660](https://github.com/CrocSwap/integer-mult-bounds/pull/5660), head `3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa`, has exactly one final four-gate block matching the published replacement. Its zero-based program indices are 14187, 14189, 14192 and 14194. The nominated edit changes only the common chart of `ADD(586,733,"-4",597)` at event 14189 to 652, retaining scalar chronology, coefficients, roles and endpoints. + +Donor 733's immediately preceding required contact is event 13554, `ADD(695,733,"1",597)`. Its immediately succeeding required contact is event 14397, `ADD(132,733,"2",597)`. Both are source reads and must be included in its contact chain. Thus the changed donor chain contains + +$$597\longrightarrow652\longrightarrow597.$$ + +The ordered bases of these frames are `[82]` and `[82,268]`, respectively. Over the source binary ambient space, 82 and 268 are nonzero and distinct, so they are independent. The first span has dimension 1 and the second dimension 2. In particular, 268 does not belong to the one-dimensional span of 82. + +The published `construct.rebuild` permits a nontrivial public MOVE only when its old space is a strict subset of its new space. Hence the return from 652 to 597 is forbidden. Identical-frame coalescing does not remove the intervening required contact at 652. No alternative chart, inserted intermediate route, scalar retiming, basis change or private-return protocol is part of this object. + +This is a completed physical obstruction to the exact direct-route retag. The conditional donor tariff formula presupposes that the next required chart contains frame 652; the measured next chart is 597, so that premise fails. No new paid histogram, signed saving or two-point price was calculated after the stop. The recipient-only expression $H_2-2H_1$ is not an earned saving. + +The evidence checks the full old required-contact routes against all actual published MOVEs for both 586 and 733, including COPY source uses and final endpoints. Owned chronology is checked at descriptor level. It does not independently replay endpoint matrices, owned erasure, native phases, ordinary costs, the full caller/compiler or funded $\kappa$. The public grammar text is pinned independently; equality to an archive member was not checked. The standalone checker directly reads the committed descriptor and imports no source module or archive. + +No conclusion transfers to [PR #5678](https://github.com/CrocSwap/integer-mult-bounds/pull/5678), head `af814f6f3c477fdd13b8f04380a33cf32004966b`, which changes paid bases and reports conditional $\kappa=0.00310815849$. This historical obstruction is neither a global no-go nor a claim stronger than a successor construction. diff --git a/research/p104-chart-contact-obstruction/README.md b/research/p104-chart-contact-obstruction/README.md new file mode 100644 index 0000000000..770d33e971 --- /dev/null +++ b/research/p104-chart-contact-obstruction/README.md @@ -0,0 +1,48 @@ +# A required donor read blocks one historical contact-chart retag + +## Change and mathematical scope + +This package records a completed, source-bound physical obstruction on Ali Romman's [PR #5660](https://github.com/CrocSwap/integer-mult-bounds/pull/5660). Changing only `ADD(586,733,"-4",597)` to chart 652 forces donor 733 through `597 → 652 → 597`. The last transition is forbidden by the source's strictly increasing public-MOVE rule: frame 597 has basis `[82]`, while frame 652 has basis `[82,268]` and one greater dimension. The short direct proof is in [PROOF.md](PROOF.md). + +The exact historical head is `3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa`. Its compressed emitted WORD is 107,909 bytes, Git blob `9e68b7de6bfc23bc4fe9940c718dba350ba8a893`, SHA256 `9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6`. The unique nominated event is final program index 14189; predecessor skeleton indices were not transferred. The next donor read is `ADD(132,733,"2",597)` at event 14397. + +The result is `STOP_UNSUPPORTED_FORWARD_NESTING`. It earns no candidate invoice, paid/target gain, ordinary-cost admission or new $\kappa$. No changed full word was constructed. The source's complete authenticated author invoice, 66,474 paid requests and 12,958 targets, remains a baseline rather than an independently replayed full census. No prices were computed after the physical stop. + +## Task and overlap + +The task is a changed, tightly bounded investigation under `complex-new-helper-inventory`; [TASK.json](TASK.json) retains its exact originating card. The publication base and fresh canonical guidance commit are `df0137efd35e11b4445734bf612bdd4c7ebc330c`. All scientific runtime data is committed inside this package; replay requires no foreign Git object, network, constructor or predecessor archive. + +The added value is the exact donor-contact witness and reproducible stop for this one untested chart assignment. It does not refute the published four-gate identity or enumerate all frame schedules. [PR #5678](https://github.com/CrocSwap/integer-mult-bounds/pull/5678), head `af814f6f3c477fdd13b8f04380a33cf32004966b`, is a later paid-basis construction reporting conditional $\kappa=0.00310815849$. This historical word's obstruction does not transfer to it. A bounded overlap gate is context, not a global novelty proof. Neighboring [Discussion #5645](https://github.com/CrocSwap/integer-mult-bounds/discussions/5645) reports separate native-frame region screens; this certificate claims none of that search domain. + +## Validation + +From a committed checkout, metadata and the registered normal/optimized pair are separate commands: + +```sh +python3 -B scripts/research_package.py --package research/p104-chart-contact-obstruction --check-only +python3 -B scripts/research_package.py --package research/p104-chart-contact-obstruction +python3 -B scripts/check_research_commit.py --package research/p104-chart-contact-obstruction --check-source-history +``` + +For a relocated, read-only, Git-free copy, run each explicit command from any directory: + +```sh +python3 -I -B /path/to/p104-chart-contact-obstruction/verify.py +python3 -I -B -O /path/to/p104-chart-contact-obstruction/verify.py +``` + +Root executes these within a serial 150-second, 512 MiB guard, with each registered child capped at 60 seconds. Each registered command runs the scientific core once; the normal/optimized pair runs it twice in total. The wrapper uses a fresh external bytecode-cache namespace, writes no package files, propagates failures and requires the entire core output SHA256 `41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4`. There are no excluded result fields or assertion-based acceptance checks. + +The original pair completed in 1.1085932450077962 seconds with sampled peak descendant RSS 52,711,424 bytes. Both children exited 0, stderr was empty, all seven scoped controls rejected, complete output bytes agreed and all 35 frozen files remained unchanged. Public evidence retains both full result byte strings, the original checker, and explicitly sanitized request/review/receipt extracts with original hashes. Portable replay and export measurements are reported separately by their new qualification receipts. + +[PORTABLE.json](PORTABLE.json) inventories payload bytes and [SOURCES.json](SOURCES.json) records public custody. The scientific core differs from the original by exactly `ROOT=HERE.parents[2]` becoming `ROOT=HERE`; [the diff](evidence/CORE-ADAPTATION.diff) is verified before execution. INPUTS and custody are reduced to fields actually consumed. Two additional byte-integrity controls reject altered compressed input and core bytes without decoding mutated data. The original seven controls retain their declared sanity/accounting scope. + +Decompression has a hard 16 MiB abort cap; that is not a claim about required size. Descriptor and instruction caps remain unchanged. All contacts for the two roles, including both COPY operands, SCALE and final endpoints, are included. The declared COPY/SCALE grammar comes from authenticated public source text; its equality to an archive member has not been checked. This verifier imports no source modules. Endpoint matrices, erasure-zero values, native phases/all widths, ordinary costs and the complete compiler/funding/BIT/outer conjunction were not admitted. + +## Credit + +Ali Romman supplied the [PR #5660](https://github.com/CrocSwap/integer-mult-bounds/pull/5660) construction and public verification. Its A2 lineage credits [PR #3998](https://github.com/CrocSwap/integer-mult-bounds/pull/3998), [PR #4019](https://github.com/CrocSwap/integer-mult-bounds/pull/4019) and zxv's [PR #5643](https://github.com/CrocSwap/integer-mult-bounds/pull/5643); [PR #5644](https://github.com/CrocSwap/integer-mult-bounds/pull/5644) supplies the helper relations, and [PR #5650](https://github.com/CrocSwap/integer-mult-bounds/pull/5650) the released composition. Retained source notices credit David Arias's word, Cinna Davis's private reuse, Gareth Davidson's composition, and the source controller/native/compiler/precision contributors. Classical exact binary subspace and rational interval methods are used. Chris R/Clear1nsight's bounded qualification, independent static review and portable packaging used substantial OpenAI Codex assistance. Apache-2.0 notices remain in [NOTICE](NOTICE) and the vendored files. No independent human or proof-kernel acceptance is implied. + +## Open next questions + +No automatic construction or fallback is justified for this exact retag. Stop this object. A different scalar graph, chart, source word, boundary or private-return rule requires a fresh exact nomination and ownership gate before further science. The structured stop reason is in [TASK.json](TASK.json); this package authorizes no next scan or construction. diff --git a/research/p104-chart-contact-obstruction/SOURCES.json b/research/p104-chart-contact-obstruction/SOURCES.json new file mode 100644 index 0000000000..382e1a4bc4 --- /dev/null +++ b/research/p104-chart-contact-obstruction/SOURCES.json @@ -0,0 +1,95 @@ +{ + "base_commit": "df0137efd35e11b4445734bf612bdd4c7ebc330c", + "files": [ + { + "git_blob": "f126dd2e2dad2b669e75d1d0d0bd05c600725602", + "path": "docs/research/agent-task-catalog.json", + "sha256": "f7a48bfa2659b88378282a8eee7d9fe52cdf505594124c4d1686b58510fffd72", + "usage": "provenance" + } + ], + "grammar_caveat": "Authenticated declared public grammar; archive-member equality untested. Direct committed-data replay imports no source/archive module.", + "original_checker_sha256": "b296855175e7d2cf84bbab07696b6b5b9589ffe4e1a9060174bb6d796f065304", + "original_request_sha256": "9519e4bce478c7d61c60fb1bb01ea4a425f137b668c57fbab83be8d329a9b041", + "original_result_sha256": "41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4", + "payload_inventory": "PORTABLE.json", + "schema_version": 1, + "source_head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "source_policy": "Self-contained committed source export; public predecessor heads are provenance labels, never Git-runtime dependencies or unsupported external pins. All runtime paths are package-local and listed in INPUTS.json and PORTABLE.json. Package-local files trigger CI replay; no external live input.", + "source_pr_url": "https://github.com/CrocSwap/integer-mult-bounds/pull/5660", + "vendored_sources": [ + { + "git_blob": "4671283b4fa00fe444cd61353863d14b0e7ac774", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "package_path": "source/WITNESS.json", + "sha256": "12085b340d4d3ef76a70e4c92b6188c4e6eb6962815cc3e5d1da009ca52abb48", + "upstream_path": "research/p104-contact-rewrite/WITNESS.json", + "url": "https://github.com/aliromman/integer-mult-bounds/blob/3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa/research/p104-contact-rewrite/WITNESS.json" + }, + { + "git_blob": "1207c370448732436e5dd697c6309a71a27a9075", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "package_path": "source/construct.py", + "sha256": "485eefe102fa94de58512d4a05f437a4213ff8b7e1fd8bed45824af374f9d4c3", + "upstream_path": "research/p104-contact-rewrite/construct.py", + "url": "https://github.com/aliromman/integer-mult-bounds/blob/3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa/research/p104-contact-rewrite/construct.py" + }, + { + "git_blob": "5eab6148f782d11cc5d8d0ec923997fb81bf94f8", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "package_path": "source/PROOF.md", + "sha256": "18088012842ae0ef1d120dd7681aa8ec064f8ed7ecc457f909ff2dc49f010745", + "upstream_path": "research/p104-contact-rewrite/PROOF.md", + "url": "https://github.com/aliromman/integer-mult-bounds/blob/3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa/research/p104-contact-rewrite/PROOF.md" + }, + { + "git_blob": "93ba8c1769b90103307c4f1196f3a78d9ab7e017", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "package_path": "source/verify.py", + "sha256": "474315b0bad561db8d98583491c326a04f5ea33ba40a2439fca420fe5200406b", + "upstream_path": "research/p104-contact-rewrite/verify.py", + "url": "https://github.com/aliromman/integer-mult-bounds/blob/3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa/research/p104-contact-rewrite/verify.py" + }, + { + "git_blob": "75ca00f9e1d30bc5b2c9305606f5b8a97fb66174", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "package_path": "source/patterns.py", + "sha256": "2fc9452ac1740998ad2a5ef71ce9fbb3e08133a89e06e744a6cc3258a02faaa4", + "upstream_path": "research/p104-contact-rewrite/patterns.py", + "url": "https://github.com/aliromman/integer-mult-bounds/blob/3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa/research/p104-contact-rewrite/patterns.py" + }, + { + "git_blob": "1b54419bd2ebbe69f81c6efc64f2359839be2c43", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "package_path": "source/RESULT.json", + "sha256": "6131855481874f4ad273bd13ac3c8a577eed41754c28c07a2fe645406db604b4", + "upstream_path": "research/p104-contact-rewrite/RESULT.json", + "url": "https://github.com/aliromman/integer-mult-bounds/blob/3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa/research/p104-contact-rewrite/RESULT.json" + }, + { + "git_blob": "2a5c2b8015ece09e4788b7742d1351aa87545299", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "package_path": "source/SOURCES.json", + "sha256": "6d3fa5d28d1022703dd853b107e700664f88203e3b7858fc92b48e45b3744367", + "upstream_path": "research/p104-contact-rewrite/SOURCES.json", + "url": "https://github.com/aliromman/integer-mult-bounds/blob/3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa/research/p104-contact-rewrite/SOURCES.json" + }, + { + "bytes": 107909, + "git_blob": "9e68b7de6bfc23bc4fe9940c718dba350ba8a893", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "package_path": "source/WORD.json.gz", + "sha256": "9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6", + "upstream_path": "research/p104-contact-rewrite/WORD.json.gz", + "url": "https://github.com/aliromman/integer-mult-bounds/blob/3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa/research/p104-contact-rewrite/WORD.json.gz" + }, + { + "git_blob": "e72cb02dba9b68d3bd5934371b5d25a44589c482", + "head": "ed4dc88a09a7d201971f6603b8c2074e95dd9c32", + "package_path": "source/local-grammar.py", + "sha256": "716d01a342467f87b14d67853d8de30740f9f2fa881afe271db0df5ef8b19697", + "upstream_path": "research/p104-helper-subspace-splits/local.py", + "url": "https://github.com/CrocSwap/integer-mult-bounds/blob/ed4dc88a09a7d201971f6603b8c2074e95dd9c32/research/p104-helper-subspace-splits/local.py" + } + ] +} diff --git a/research/p104-chart-contact-obstruction/TASK.json b/research/p104-chart-contact-obstruction/TASK.json new file mode 100644 index 0000000000..950a4b1b6e --- /dev/null +++ b/research/p104-chart-contact-obstruction/TASK.json @@ -0,0 +1,61 @@ +{ + "actual_scope": "Exact fixed historical donor-contact obstruction to chart 597-to-652 retag of ADD(586,733,-4), with scalar chronology and endpoints retained.", + "ai_assistance": "Substantial OpenAI Codex assistance in the bounded qualification, separate static review, proof explanation and portable packaging. Predecessor construction is credited.", + "author": "Chris R (Clear1nsight), with substantial OpenAI Codex assistance", + "base_commit": "df0137efd35e11b4445734bf612bdd4c7ebc330c", + "bottleneck_link": "A recipient-only paid shortcut is unavailable when the unchanged donor has a later required lower-chart read.", + "budget_minutes": null, + "evidence": "Original complete normal/optimized result bytes, exact source WORD and public grammar, original checker with one-line portable root adaptation, sanitized request and independent pre/post reviews and execution receipts.", + "no_open_questions_reason": "The fixed direct route requires the forbidden 652-to-597 return. This certificate justifies stopping this object, not automatically constructing or scanning alternatives.", + "open_questions": [], + "original_card": { + "acceptance_gate": "A new physically realizable contract outside the frozen catalogue whose per-call profile, screened with ceiling.ceiling(), beats the selected word's packing ceiling; a lower cap does not establish identical circuitry or order attainable optima, and is insufficient to pass the stronger-budget target under this model. 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.", + "allowed_variations": [ + "Narrow to one changed boundary or helper type with explicit counts.", + "If the coverage law, template or guard changes, derive an applicable fully charged replacement bound instead of applying the incumbent ceiling outside its scope." + ], + "bottleneck_link": "Packing of the selected word is capped at +0.87% (ceiling model); only a lower local excess spend or a changed coverage law raises the cap.", + "first_experiment": "Before any synthesis, write the candidate per-call local profile (and centre charge / unpaid coordinates if changed) and screen it with ceiling.ceiling(); reject it if even the ideal ceiling does not beat the selected word's by your stated margin.", + "first_step": { + "command": [ + "python3", + "-B", + "research/complex-local-word-ceiling/verify.py" + ], + "expected": "PASS_COMPLEX_LOCAL_WORD_CEILING", + "inspect": "Read the selected word's per-call local profile, its packing ceiling and the lever table; run levers.py for the ideal budget of the lever you target.", + "scope": "Positive control and planning budget only; this is not a new construction or full cold replay." + }, + "id": "complex-new-helper-inventory", + "methods": [ + "Propose a changed helper inventory and derive an optimistic exact moment.", + "Design a small completed instance and independently verify its endpoint and rank bill." + ], + "overlap_terms": [ + "helper inventory", + "heterogeneous-owner", + "mutable leaver" + ], + "question": "Can a new local cost interface change the deficit-to-recursive-cost ratio beyond current packing?", + "scope_change_triggers": [ + "Mixing only providers already inside the pinned catalogue.", + "Only changing helper terminal subspaces and monotone frames within the fixed scalar word, entrances and cleanup contract already covered by #1995/#2013.", + "Continuing a partial cost improvement while leaving the same unpriced consumer, restoration or central-readout obligation unresolved; refresh the family expansion decision first. Local product-retiming evidence has a narrow scope and is not a ban on changed graphs or contracts." + ], + "starting_points": [ + "docs/research/research-family-status.md", + "research/complex-local-word-ceiling/README.md", + "research/heterogeneous-owner-assembly/README.md", + "certificates/selected-result.json", + "research/selected-k8-unrestricted-ends/README.md" + ] + }, + "outcome": "negative-result", + "priority_revision": 7, + "schema_version": 1, + "scope_change_reason": "The broad inventory question is narrowed to a source-bound physical obstruction for one fixed retained-input contact-chart proposal. No new inventory or supplier is claimed.", + "scope_key": "historical-pr5660-add586-733-chart597-to652-fixed-scalar-position", + "scope_status": "changed", + "stop_rule": "Stop this exact retag. Changed sources, graphs, bases, charts, schedules or boundaries need a fresh nomination and ownership gate; no automatic scan.", + "task_id": "complex-new-helper-inventory" +} diff --git a/research/p104-chart-contact-obstruction/VERIFY.json b/research/p104-chart-contact-obstruction/VERIFY.json new file mode 100644 index 0000000000..27e9abf141 --- /dev/null +++ b/research/p104-chart-contact-obstruction/VERIFY.json @@ -0,0 +1,30 @@ +{ + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/verify.py" + ], + "checks": "Authenticate committed public payloads and exact one-line core adaptation; execute the core once; require full original output SHA256 and exact donor 597-to-652-to-597 obstruction, seven original and two portable integrity controls; no candidate invoice or kappa.", + "timeout_seconds": 60 + }, + { + "argv": [ + "{python}", + "-I", + "-B", + "-O", + "{package}/verify.py" + ], + "checks": "Authenticate committed public payloads and exact one-line core adaptation; execute the core once; require full original output SHA256 and exact donor 597-to-652-to-597 obstruction, seven original and two portable integrity controls; no candidate invoice or kappa.", + "timeout_seconds": 60 + } + ], + "inputs": [], + "python": "3.12", + "requirements": [], + "schema_version": 1, + "status": "ready" +} diff --git a/research/p104-chart-contact-obstruction/check.py b/research/p104-chart-contact-obstruction/check.py new file mode 100644 index 0000000000..dc40f11be8 --- /dev/null +++ b/research/p104-chart-contact-obstruction/check.py @@ -0,0 +1,382 @@ +#!/usr/bin/env python3 +"""One fixed 5660 contact-chart prerequisite; root-only scientific execution. + +No source imports, constructor, changed full word, endpoint/native replay or +whole pricing engine. Exact rational/bit arithmetic; Apache-2.0. +Credit Ali Romman and retained source/controller/native/compiler contributors; +OpenAI Codex assistance. See CONTRACT.md for the deliberately limited claim. +""" +from collections import Counter +from fractions import Fraction as Q +import gzip +import hashlib +import io +import json +from pathlib import Path +import sys + +HERE=Path(__file__).resolve().parent +ROOT=HERE +HEAD='3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa' +WORD_SHA='9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6' +WORD_BLOB='9e68b7de6bfc23bc4fe9940c718dba350ba8a893' +LIMIT=16*1024*1024 +BLOCK=[['ADD',165,586,'1/2',3],['ADD',586,733,'-4',597], + ['ADD',21,586,'1',652],['ADD',165,21,'-1/2',652]] +POINTS=(Q(33,10000),Q(6600001,2000000000)) + + +class SourceError(ValueError):pass + + +def need(ok,message): + if not ok:raise SourceError(message) + + +def sha(raw):return hashlib.sha256(raw).hexdigest() +def blob(raw):return hashlib.sha1(b'blob '+str(len(raw)).encode()+b'\0'+raw).hexdigest() +def canonical(value):return json.dumps(value,sort_keys=True,separators=(',',':')).encode() +def shown(h):return {str(r):n for r,n in sorted(h.items()) if n} +def mass(h):return sum(r*n for r,n in h.items()) +def clean(h):return {r:n for r,n in h.items() if n} +def isint(x):return type(x) is int + + +def authenticate_word(raw,pin): + need(pin['head']==HEAD and pin['bytes']==107909 and pin['sha256']==WORD_SHA and pin['git_blob']==WORD_BLOB, + 'Exact fixed source binding') + need(len(raw)==107909 and sha(raw)==WORD_SHA and blob(raw)==WORD_BLOB,'Compressed WORD byte/Git/SHA identity before decode') + + +def integer_token(s): + need(len(s)<=11,'Bounded JSON integer token') + n=int(s);need(abs(n)<=2**31-1,'Bounded JSON integer value');return n + + +def pairs_unique(pairs): + out={} + for k,v in pairs: + need(k not in out,'Duplicate JSON descriptor key');out[k]=v + return out + + +def bad_constant(s):raise SourceError('Unexpected JSON numeric constant '+s) + + +def decode(raw,pin): + authenticate_word(raw,pin) + with gzip.GzipFile(fileobj=io.BytesIO(raw),mode='rb') as stream: + decoded=stream.read(LIMIT+1) + need(len(decoded)<=LIMIT,'Decompressed WORD exceeds hard 16 MiB abort cap') + need(stream.read(1)==b'','Decompressed WORD has excess data') + word=json.loads(decoded,object_pairs_hook=pairs_unique,parse_int=integer_token,parse_constant=bad_constant) + stack=[(word,0)];nodes=0 + while stack: + x,depth=stack.pop();nodes+=1 + need(nodes<=500000 and depth<=16,'Descriptor node/depth cap') + if isinstance(x,dict): + need(len(x)<=64 and all(isinstance(k,str) and len(k)<=128 for k in x),'Descriptor field cap') + stack.extend((v,depth+1) for v in x.values()) + elif isinstance(x,list): + need(len(x)<=26000,'Descriptor array cap');stack.extend((v,depth+1) for v in x) + elif isinstance(x,str):need(len(x)<=4096,'Descriptor string cap') + elif isinstance(x,float):need(x==x and abs(x)!=float('inf'),'Finite unused metadata number') + else:need(x is None or type(x) in (int,bool),'Unexpected descriptor value') + return word,len(decoded),sha(decoded) + + +def reduced_basis(vectors): + pivots={} + for v in vectors: + need(isint(v) and 0=n,'No public lifetime creation/erasure') + else: + frame(e[-1]);need(isinstance(e[-2],str) and len(e[-2])<=128,'Exact bounded scalar coefficient') + q=Q(e[-2]);need(q.numerator.bit_length()<=256 and q.denominator.bit_length()<=256 and + q.denominator&(q.denominator-1)==0 and q and abs(q)+1<2**16,'Bounded nonzero dyadic scalar coefficient') + if op=='SCALE':need(abs(q.numerator)&(abs(q.numerator)-1)==0,'Dyadic unit SCALE grammar') + if op in ('ADD','COPY'):need(e[1]!=e[2],'Distinct scalar operands') + if op=='COPY':need(e[1]>=n,'COPY destination is an owned slot') + touched=event_roles(e) + if op!='MOVE' or e[1]>=n:skeleton.append((i,e)) + if any(r>=n for r in touched):owned_tape.append(e) + if op!='MOVE':scalar_tape.append(e[:-1]) + if op=='INIT': + slot=e[1]-n;need(owned_current[slot] is None,'Fresh owned lifetime') + owned_current[slot]=e[2];lifetimes+=1;peak=max(peak,sum(x is not None for x in owned_current)) + elif op=='CLEAR': + slot=e[1]-n;need(owned_current[slot]==e[2],'Declared owned erasure chart');owned_current[slot]=None + elif op=='MOVE': + if e[1]>=n: + slot=e[1]-n;need(owned_current[slot]==e[2] and e[4] is True and strict(spaces[e[3]],spaces[e[2]]), + 'Existing owned MOVE chronology/orientation/reverse inclusion');owned_current[slot]=e[3] + if e[1] in current: + r=e[1];need(e[4] is False and current[r]==e[2] and strict(spaces[e[2]],spaces[e[3]]), + 'Existing affected public MOVE is direct strict forward inclusion') + moves[r].append({'event':i,'old':e[2],'new':e[3],'rank':len(spaces[e[3]])-len(spaces[e[2]])});current[r]=e[3] + else: + for r in touched: + if r>=n:need(owned_current[r-n]==e[-1],'Owned scalar contact chart/activity') + if r in current: + need(current[r]==e[-1],'Existing affected role contact matches its actual current chart') + access=[] + if e[1]==r:access.append('destination') + if op in ('ADD','COPY') and e[2]==r:access.append('source') + contacts[r].append({'event':i,'op':op,'instruction':e,'frame':e[-1],'access':access}) + need(lifetimes==11 and peak==2 and all(x is None for x in owned_current),'Complete declared owned chronology counts and final inactivity') + for r in current:need(current[r]==word['final'][r],'Affected role actual final chart') + return spaces,contacts,moves,skeleton,shown(target),{ + 'owned_lifetimes':lifetimes,'peak_owned':peak,'owned_subsequence_sha256':sha(canonical(owned_tape)), + 'scalar_opcode_roles_coefficients_order_sha256':sha(canonical(scalar_tape)), + 'public_boundary_descriptor_sha256':sha(canonical({k:word[k] for k in ('public','owned_fields','initial','final','live')})), + 'unmodified_nonprogram_descriptor_sha256':sha(canonical({k:v for k,v in word.items() if k!='program'})), + 'scope':'Descriptor and chart/lifetime chronology checks only; no endpoint linear-map, erasure-zero or native phase replay.'} + + +def unique_site(sites): + need(len(sites)==1,'Exactly one final four-gate skeleton occurrence');return sites[0] + + +def check_block(block):need(block==BLOCK,'Exact fixed four-gate scalar roles/coefficients/charts') + + +def route(initial,final,contacts,spaces): + required=[{'kind':'input','frame':initial}]+[dict(c,kind='contact') for c in contacts]+[{'kind':'final','frame':final}] + visits=[] + for item in required: + if not visits or visits[-1]!=item['frame']:visits.append(item['frame']) + edges=[];failures=[] + for a,b in zip(visits,visits[1:]): + ok=strict(spaces[a],spaces[b]);entry={'old':a,'new':b,'rank':len(spaces[b])-len(spaces[a]),'strict_forward':ok} + edges.append(entry) + if not ok:failures.append(entry) + return {'required':required,'coalesced_visits':visits,'edges':edges,'unsupported_edges':failures} + + +def histogram(edges): + need(all(e['strict_forward'] and e['rank']>0 for e in edges),'Only legal forward edges earn a paid histogram') + return dict(Counter(e['rank'] for e in edges)) + + +def sumhist(a,b): + x=Counter(a);x.update(b);return clean(dict(x)) + + +def difference(new,old): + x=Counter(new);x.subtract(old);return clean(dict(x)) + + +def charged(old_h,old_s,new_h,new_s,supplied): + expected=difference(sumhist(new_h,new_s),sumhist(old_h,old_s)) + need(expected==supplied,'Full recipient plus donor charges, with no omitted donor leg');return expected + + +def log_bounds(r): + def unit(u): + z=(u-1)/(u+1);need(0<=z<=Q(1,3),'Rational logarithm domain') + low=2*sum((z**(2*j+1)/Q(2*j+1) for j in range(32)),Q(0)) + return low,low+2*z**65/(65*(1-z*z)) + k=r.bit_length()-1;a,b=unit(Q(r,2**k));l,u=unit(Q(2));return a+k*l,b+k*u + + +def power(r,c): + if r==1:return Q(1),Q(1) + l,u=log_bounds(r) + def exponential(x): + need(0<=x<1,'Alternating exponential domain');term=s=Q(1);low=high=None + for j in range(1,13): + term*=-x/j;s+=term + if j==11:low=s + if j==12:high=s + return low,high + a,b=r*exponential(c*u)[0],r*exponential(c*l)[1];mesh=10**24 + low=Q((a*mesh).__floor__(),mesh);high=Q(-((-b*mesh).__floor__()),mesh) + need(low<=a<=b<=high,'Exact outward rational price mesh');return low,high + + +def price(delta,c): + low=high=Q(0) + for r,n in delta.items(): + need(isint(r) and 1<=r<=9 and isint(n),'Bounded exact signed paid coefficient') + a,b=power(r,c);low+=n*(a if n>=0 else b);high+=n*(b if n>=0 else a) + return {'C':str(c),'local_paid_cost_difference_interval':[str(low),str(high)], + 'full18_paid_cost_difference_interval':[str(18*low),str(18*high)]},low,high + + +def reject(action,strength): + try:action() + except (SourceError,ValueError,KeyError):return {'outcome':'rejected','strength':strength} + raise SourceError('Control unexpectedly accepted: '+strength) + + +def main(): + inputs=json.loads((HERE/'INPUTS.json').read_bytes()) + for name,digest in inputs['files'].items():need(sha((ROOT/name).read_bytes())==digest,'Frozen input SHA '+name) + pin=json.loads((ROOT/inputs['word_custody']).read_bytes());raw=(ROOT/inputs['word']).read_bytes() + authenticate_word(raw,pin) + for name,expected in inputs['git_blobs'].items(): + need(blob((ROOT/name).read_bytes())==expected,'Authenticated published text Git blob '+name) + receipt=json.loads((ROOT/inputs['source_result']).read_bytes()) + nominal=json.loads((ROOT/inputs['nomination']).read_bytes()) + need(nominal['single_object']['source_head']==HEAD and nominal['single_object']['edit_old']==BLOCK[1] and + nominal['single_object']['edit_new']==['ADD',586,733,'-4',652],'Single fixed nomination') + word,length,decoded_sha=decode(raw,pin) + spaces,contacts,moves,skeleton,helpers,boundaries=descriptor(word) + need(helpers=={str(k):v for k,v in receipt['local']['helpers'].items()} and + receipt['local']['public_inputs']==743 and receipt['local']['owned_fields']==9 and + receipt['local']['owned_lifetimes']==11 and receipt['local']['peak_owned_fields']==2, + 'Published local target/boundary/owned descriptor binding') + simple=[e for _,e in skeleton] + site=unique_site([i for i in range(len(simple)-3) if simple[i:i+4]==BLOCK]);check_block(simple[site:site+4]) + actual_indices=[skeleton[site+j][0] for j in range(4)];anchor=actual_indices[1] + old={};new={};modified={};neighbor={} + for r in (586,733): + old[r]=route(word['initial'][r],word['final'][r],contacts[r],spaces) + need(not old[r]['unsupported_edges'],'Existing affected contact chain is strictly forward') + need([(e['old'],e['new'],e['rank']) for e in old[r]['edges']]==[(e['old'],e['new'],e['rank']) for e in moves[r]], + 'Complete old required-contact route equals all actual published affected MOVEs') + hit=[i for i,c in enumerate(contacts[r]) if c['event']==anchor] + need(len(hit)==1 and contacts[r][hit[0]]['instruction']==BLOCK[1],'Both role lists bind the same literal donor/recipient event') + seq=[dict(c) for c in contacts[r]];i=hit[0] + before=seq[i-1] if i else {'kind':'input','frame':word['initial'][r]} + after=seq[i+1] if i+1=0 for n in candidate.values()) and mass(targets)-mass(candidate)==760,'Complete donor-adjusted invoice and rank mass') + result.update({'recipient_local_delta':shown(dh),'donor_local_delta':shown(ds),'complete_two_role_local_delta':shown(delta), + 'old_recipient_histogram':shown(oh),'old_donor_histogram':shown(os),'new_recipient_histogram':shown(nh),'new_donor_histogram':shown(ns), + 'candidate_paid_invoice':shown(dict(candidate)),'conditional_unchanged_targets':shown(targets), + 'candidate_paid_count':sum(candidate.values()),'candidate_target_count':sum(targets.values()), + 'target_transfer_premise':'Same public boundary/target descriptors and caller; requires later realized chart induction and native/endpoint validation.'}) + prices=[];intervals=[] + for c in POINTS: + row,lo,hi=price(delta,c);prices.append(row);intervals.append((lo,hi)) + result['two_point_paid_cost_differences']=prices + if all(hi<0 for lo,hi in intervals): + result['status']='FAVORABLE_PHYSICAL_ECONOMIC_PREREQUISITE_ONLY';result['stop_reason']='Both exact donor-adjusted paid-cost upper bounds are negative; no construction or funded result follows.' + elif any(lo>=0 for lo,hi in intervals): + result['status']='STOP_DONOR_ADJUSTED_NO_GAIN';result['stop_reason']='At least one required point has nonnegative exact paid-cost lower bound, including exact-zero cases.' + else: + result['status']='STOP_UNRESOLVED_SIGN';result['stop_reason']='The fixed rational enclosures do not certify negative cost at both points. No fallback precision/route search.' + return result + + +if __name__=='__main__': + try:output=main();code=0 + except Exception as error: + output={'schema':'one-h586-chart-retag-feasibility/v1','status':'STOP_SOURCE_OR_BINDING_FAILURE', + 'failure':type(error).__name__+': '+str(error),'new_kappa':None,'changed_full_word_emitted':False, + 'source_modules_imported':False,'fallback_search':False};code=2 + print(json.dumps(output,sort_keys=True,separators=(',',':'))) + sys.exit(code) diff --git a/research/p104-chart-contact-obstruction/evidence/CORE-ADAPTATION.diff b/research/p104-chart-contact-obstruction/evidence/CORE-ADAPTATION.diff new file mode 100644 index 0000000000..e09a43a206 --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/CORE-ADAPTATION.diff @@ -0,0 +1,11 @@ +--- original/check.py ++++ portable/check.py +@@ -16,7 +16,7 @@ + import sys + + HERE=Path(__file__).resolve().parent +-ROOT=HERE.parents[2] ++ROOT=HERE + HEAD='3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa' + WORD_SHA='9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6' + WORD_BLOB='9e68b7de6bfc23bc4fe9940c718dba350ba8a893' diff --git a/research/p104-chart-contact-obstruction/evidence/GUARD-RECEIPT.json b/research/p104-chart-contact-obstruction/evidence/GUARD-RECEIPT.json new file mode 100644 index 0000000000..008aed3dfb --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/GUARD-RECEIPT.json @@ -0,0 +1,13 @@ +{ + "elapsed_seconds": 1.1085932450077962, + "exit_code": 0, + "log_sha256": "9b0e8b63db3599aa15e40684fa537b70732bbe262d086810e723fcf31472d2bb", + "memory_limit_mib": 512, + "original_sha256": "ad3823b2e7830fbaaca3444ea1221552070c402f89e0ed167cdab89447af87ac", + "rss_samples": 11, + "sampled_peak_descendant_rss_bytes": 52711424, + "sanitization": "Command, cwd and interpreter details omitted; not original receipt bytes.", + "schema": "serial-research-run/v1", + "termination": null, + "timeout_seconds": 150.0 +} diff --git a/research/p104-chart-contact-obstruction/evidence/ORIGINAL-REQUEST.json b/research/p104-chart-contact-obstruction/evidence/ORIGINAL-REQUEST.json new file mode 100644 index 0000000000..3e3a767b52 --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/ORIGINAL-REQUEST.json @@ -0,0 +1,42 @@ +{ + "checks": "Unique four-gate anchor; complete old/new two-role direct contact routes; donor-adjusted conditional invoice; fixed two-point price only after physical legality.", + "original_checker_sha256": "b296855175e7d2cf84bbab07696b6b5b9589ffe4e1a9060174bb6d796f065304", + "original_contract_sha256": "2d78e1ffc29f45f9e2f9ce4758b72f9c59ae48481b5e1d4541a97918e7db4605", + "original_inputs_sha256": "9fb19453b6b822117a4eb86e9fbde78176ef4f21a98105fc21a56ea2b35682ee", + "original_request_sha256": "9519e4bce478c7d61c60fb1bb01ea4a425f137b668c57fbab83be8d329a9b041", + "original_wrapper_sha256": "c8c1dd823b1a1f056bdace6542f9a5e97087ce952c3a1e81d4e182de656d45ac", + "resource_contract": { + "automatic_retry": false, + "cap_increase": false, + "child_seconds": 60, + "memory_mib": 512, + "serial": true, + "total_seconds": 150 + }, + "sanitization": "Scientific fields extracted; local workspace paths, authority/planning and unrelated context omitted. This extract is not the original request byte string.", + "schema": "public-scientific-request-extract/v1", + "single_edit": { + "edit_new": [ + "ADD", + 586, + 733, + "-4", + 652 + ], + "edit_old": [ + "ADD", + 586, + 733, + "-4", + 597 + ], + "source_head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa" + }, + "source_head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "source_word": { + "bytes": 107909, + "git_blob": "9e68b7de6bfc23bc4fe9940c718dba350ba8a893", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "sha256": "9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6" + } +} diff --git a/research/p104-chart-contact-obstruction/evidence/PAIR-RECEIPT.json b/research/p104-chart-contact-obstruction/evidence/PAIR-RECEIPT.json new file mode 100644 index 0000000000..3a1a770a4a --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/PAIR-RECEIPT.json @@ -0,0 +1,30 @@ +{ + "elapsed_seconds": 1.038070473994594, + "immutable_after_sha256": "fc15c40134b5eb0a630d9526cb0161e0449f2df85711fc3f86e0b107e74ea452", + "immutable_before_sha256": "fc15c40134b5eb0a630d9526cb0161e0449f2df85711fc3f86e0b107e74ea452", + "immutables_unchanged": true, + "modes": [ + { + "exit_code": 0, + "mode": "normal", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256": "41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4", + "timeout_seconds": 60 + }, + { + "exit_code": 0, + "mode": "optimized", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256": "41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4", + "timeout_seconds": 60 + } + ], + "negative_is_completed": true, + "original_sha256": "096f8c418c14f9ae89ef9d9c3ac5c79932fc6e9bec29b2c2acd78167e0a17f62", + "request_sha256": "9519e4bce478c7d61c60fb1bb01ea4a425f137b668c57fbab83be8d329a9b041", + "sanitization": "Absolute local command paths omitted; not original receipt bytes.", + "schema": "one-h586-chart-root-pair/v1", + "scientific_result_sha256": "41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4", + "scientific_status": "STOP_UNSUPPORTED_FORWARD_NESTING", + "status": "COMPLETED_IDENTICAL_PAIR" +} diff --git a/research/p104-chart-contact-obstruction/evidence/POST-REVIEW.json b/research/p104-chart-contact-obstruction/evidence/POST-REVIEW.json new file mode 100644 index 0000000000..e9e2f8ac4e --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/POST-REVIEW.json @@ -0,0 +1,93 @@ +{ + "candidate_paid_delta_computed": false, + "candidate_paid_invoice": null, + "checks": { + "child_exits": [ + 0, + 0 + ], + "entire_normal_optimized_bytes_equal": true, + "guard_exit": 0, + "guard_termination": null, + "immutable_mismatches": 0, + "immutable_pins_checked": 35, + "negative_controls_rejected": 7, + "pair_before_after_immutable_hash_equal": true, + "stderr_empty": true + }, + "guard_receipt_sha256": "ad3823b2e7830fbaaca3444ea1221552070c402f89e0ed167cdab89447af87ac", + "new_kappa": null, + "obstruction": { + "W": { + "event": 13554, + "instruction": [ + "ADD", + 695, + 733, + "1", + 597 + ] + }, + "Z": { + "event": 14397, + "instruction": [ + "ADD", + 132, + 733, + "2", + 597 + ] + }, + "conditional_donor_tariff_formula_applicable": false, + "ordered_bases": { + "597": [ + 82 + ], + "652": [ + 82, + 268 + ] + }, + "p": 1, + "r": 1, + "reason": "A two-dimensional subspace cannot be contained in a one-dimensional subspace; public transport must be strictly increasing.", + "required_local_route": [ + 597, + 652, + 597 + ], + "role": 733, + "unsupported_edge": { + "new": 597, + "old": 652, + "rank_difference": -1 + } + }, + "original_sha256": "89f0e6e07d06e946e28aad9cb062bf97b078647ce51d292b739415fe7378c1e5", + "pair_receipt_sha256": "096f8c418c14f9ae89ef9d9c3ac5c79932fc6e9bec29b2c2acd78167e0a17f62", + "request_sha256": "9519e4bce478c7d61c60fb1bb01ea4a425f137b668c57fbab83be8d329a9b041", + "result_sha256": "41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4", + "reviewer_word_decode_parse_rerun_source_import_or_scientific_execution": false, + "root_observed_resources": { + "elapsed_seconds": 1.1085932450077962, + "sampled_peak_descendant_rss_bytes": 52711424 + }, + "sanitization": "Selected public scientific fields; no local paths or follow-up authority. Not original review bytes.", + "schema": "independent-post-result-h586-review/v1", + "scientific_status": "STOP_UNSUPPORTED_FORWARD_NESTING", + "scope_is_global_obstruction": false, + "source_head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "two_point_prices_computed": false, + "unique_final_anchor": { + "actual_program_indices": [ + 14187, + 14189, + 14192, + 14194 + ], + "changed_event": 14189, + "historical_indices_transferred": false, + "skeleton_index": 12752 + }, + "verdict": "ACCEPT_COMPLETED_SCOPED_PHYSICAL_STOP" +} diff --git a/research/p104-chart-contact-obstruction/evidence/PUBLICATION-CONTEXT.json b/research/p104-chart-contact-obstruction/evidence/PUBLICATION-CONTEXT.json new file mode 100644 index 0000000000..29a40d01e8 --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/PUBLICATION-CONTEXT.json @@ -0,0 +1,15 @@ +{ + "decision": "CLEAR_FOCUSED_HISTORICAL_OBSTRUCTION_PUBLICATION_NO_NEW_KAPPA", + "guidance_base": "df0137efd35e11b4445734bf612bdd4c7ebc330c", + "neighboring_scope_url": "https://github.com/CrocSwap/integer-mult-bounds/discussions/5645", + "novelty_limit": "No matching public finding observed in bounded source/overlap review; no global novelty proof.", + "publication_gate_sha256": "bf7a2dd4a289bd2376c825de9a9a132a2481e85246b7a2c6f1fd874387b71413", + "source_gate_custody_sha256": "bca2e3563a8f4d40b6b61a6da9e41332617edd0aeb9cf157f9982abf97c36e0e", + "successor": { + "author_conditional_kappa": "0.00310815849", + "head": "af814f6f3c477fdd13b8f04380a33cf32004966b", + "historical_obstruction_transfers": false, + "pr_url": "https://github.com/CrocSwap/integer-mult-bounds/pull/5678", + "replayed_here": false + } +} diff --git a/research/p104-chart-contact-obstruction/evidence/RESULT-normal.json b/research/p104-chart-contact-obstruction/evidence/RESULT-normal.json new file mode 100644 index 0000000000..8ec86b5ed0 --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/RESULT-normal.json @@ -0,0 +1 @@ +{"arbitrary_input_endpoint_replay":false,"baseline_complete_paid":{"1":41070,"16":416,"2":8244,"24":416,"3":8874,"32":416,"4":1638,"40":416,"48":416,"5":2862,"56":416,"6":396,"64":416,"7":270,"72":208},"baseline_complete_targets":{"1":36,"145":208,"17":416,"2":72,"25":416,"33":416,"4":1638,"41":416,"49":416,"5":108,"57":416,"65":416,"7":90,"73":208,"8":288,"9":7398},"baseline_invoice_status":"Published authenticated receipt; no whole-source paid census or price replay.","candidate_paid_invoice":null,"changed_full_word_emitted":false,"controls":{"ambiguous_anchor":{"outcome":"rejected","strength":"Duplicate match-evidence cardinality; no changed full program"},"compressed_byte_corruption":{"outcome":"rejected","strength":"Immutable byte/Git/SHA corruption; no mutated decode"},"omitted_donor_charge":{"outcome":"rejected","strength":"Omit one actual donor old-MOVE charge while recipient/new bill held fixed"},"reversed_nesting":{"outcome":"rejected","strength":"Actual reverse inclusion of fixed source spaces"},"wrong_anchor_chart":{"outcome":"rejected","strength":"Actual four-gate binding field mutation"},"wrong_frame_space":{"outcome":"rejected","strength":"Ordered frame basis mutation"},"wrong_source_binding":{"outcome":"rejected","strength":"Exact source-head custody mutation"}},"counterfactual_contact_lists":{"586":[{"access":["source"],"event":112,"frame":3,"instruction":["ADD",123,586,"-1/2",3],"op":"ADD"},{"access":["source"],"event":114,"frame":3,"instruction":["ADD",148,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":116,"frame":3,"instruction":["ADD",175,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":118,"frame":3,"instruction":["ADD",182,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":120,"frame":3,"instruction":["ADD",203,586,"-1/2",3],"op":"ADD"},{"access":["source"],"event":122,"frame":3,"instruction":["ADD",223,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":13791,"frame":3,"instruction":["ADD",197,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":13792,"frame":3,"instruction":["ADD",147,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":14187,"frame":3,"instruction":["ADD",165,586,"1/2",3],"op":"ADD"},{"access":["destination"],"event":14189,"frame":652,"instruction":["ADD",586,733,"-4",652],"op":"ADD"},{"access":["source"],"event":14192,"frame":652,"instruction":["ADD",21,586,"1",652],"op":"ADD"},{"access":["destination"],"event":14818,"frame":773,"instruction":["ADD",586,436,"1",773],"op":"ADD"},{"access":["source"],"event":14821,"frame":774,"instruction":["ADD",351,586,"-1/2",774],"op":"ADD"},{"access":["source"],"event":15475,"frame":910,"instruction":["ADD",197,586,"-1/2",910],"op":"ADD"},{"access":["source"],"event":16714,"frame":127,"instruction":["ADD",351,586,"1/2",127],"op":"ADD"},{"access":["destination"],"event":16782,"frame":127,"instruction":["ADD",586,436,"-1",127],"op":"ADD"},{"access":["destination"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"op":"ADD"},{"access":["source"],"event":24633,"frame":127,"instruction":["ADD",21,586,"-1/2",127],"op":"ADD"},{"access":["source"],"event":24636,"frame":127,"instruction":["ADD",47,586,"-1/2",127],"op":"ADD"},{"access":["source"],"event":24639,"frame":127,"instruction":["ADD",434,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24642,"frame":127,"instruction":["ADD",435,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24645,"frame":127,"instruction":["ADD",436,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24648,"frame":127,"instruction":["ADD",437,586,"1/2",127],"op":"ADD"}],"733":[{"access":["source"],"event":113,"frame":3,"instruction":["ADD",123,733,"2",3],"op":"ADD"},{"access":["source"],"event":115,"frame":3,"instruction":["ADD",148,733,"-2",3],"op":"ADD"},{"access":["source"],"event":117,"frame":3,"instruction":["ADD",175,733,"-2",3],"op":"ADD"},{"access":["source"],"event":119,"frame":3,"instruction":["ADD",182,733,"-2",3],"op":"ADD"},{"access":["source"],"event":121,"frame":3,"instruction":["ADD",203,733,"2",3],"op":"ADD"},{"access":["source"],"event":123,"frame":3,"instruction":["ADD",223,733,"-2",3],"op":"ADD"},{"access":["source"],"event":242,"frame":3,"instruction":["ADD",127,733,"-2",3],"op":"ADD"},{"access":["source"],"event":271,"frame":3,"instruction":["ADD",132,733,"-2",3],"op":"ADD"},{"access":["source"],"event":286,"frame":3,"instruction":["ADD",136,733,"2",3],"op":"ADD"},{"access":["source"],"event":322,"frame":3,"instruction":["ADD",140,733,"2",3],"op":"ADD"},{"access":["source"],"event":357,"frame":3,"instruction":["ADD",144,733,"2",3],"op":"ADD"},{"access":["source"],"event":370,"frame":3,"instruction":["ADD",147,733,"2",3],"op":"ADD"},{"access":["source"],"event":402,"frame":3,"instruction":["ADD",153,733,"-2",3],"op":"ADD"},{"access":["source"],"event":441,"frame":3,"instruction":["ADD",157,733,"-2",3],"op":"ADD"},{"access":["source"],"event":444,"frame":3,"instruction":["ADD",158,733,"-2",3],"op":"ADD"},{"access":["source"],"event":457,"frame":3,"instruction":["ADD",160,733,"-2",3],"op":"ADD"},{"access":["source"],"event":489,"frame":3,"instruction":["ADD",165,733,"2",3],"op":"ADD"},{"access":["source"],"event":537,"frame":3,"instruction":["ADD",170,733,"-2",3],"op":"ADD"},{"access":["source"],"event":640,"frame":3,"instruction":["ADD",183,733,"-2",3],"op":"ADD"},{"access":["source"],"event":666,"frame":3,"instruction":["ADD",187,733,"2",3],"op":"ADD"},{"access":["source"],"event":723,"frame":3,"instruction":["ADD",194,733,"-2",3],"op":"ADD"},{"access":["source"],"event":750,"frame":3,"instruction":["ADD",197,733,"2",3],"op":"ADD"},{"access":["source"],"event":792,"frame":3,"instruction":["ADD",202,733,"2",3],"op":"ADD"},{"access":["source"],"event":857,"frame":3,"instruction":["ADD",210,733,"-2",3],"op":"ADD"},{"access":["source"],"event":913,"frame":3,"instruction":["ADD",218,733,"2",3],"op":"ADD"},{"access":["source"],"event":928,"frame":3,"instruction":["ADD",219,733,"-2",3],"op":"ADD"},{"access":["source"],"event":13119,"frame":3,"instruction":["ADD",695,733,"-1",3],"op":"ADD"},{"access":["destination"],"event":13552,"frame":597,"instruction":["ADD",733,746,"1",597],"op":"ADD"},{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"op":"ADD"},{"access":["source"],"event":14189,"frame":652,"instruction":["ADD",586,733,"-4",652],"op":"ADD"},{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"op":"ADD"},{"access":["source"],"event":14812,"frame":597,"instruction":["ADD",585,733,"-4",597],"op":"ADD"},{"access":["source"],"event":14885,"frame":794,"instruction":["ADD",140,733,"2",794],"op":"ADD"},{"access":["source"],"event":15467,"frame":911,"instruction":["ADD",144,733,"2",911],"op":"ADD"},{"access":["source"],"event":17246,"frame":127,"instruction":["ADD",585,733,"4",127],"op":"ADD"},{"access":["source"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"op":"ADD"},{"access":["destination"],"event":17457,"frame":127,"instruction":["ADD",733,133,"1/2",127],"op":"ADD"},{"access":["source"],"event":24634,"frame":127,"instruction":["ADD",21,733,"2",127],"op":"ADD"},{"access":["source"],"event":24637,"frame":127,"instruction":["ADD",47,733,"2",127],"op":"ADD"},{"access":["source"],"event":24640,"frame":127,"instruction":["ADD",434,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24643,"frame":127,"instruction":["ADD",435,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24646,"frame":127,"instruction":["ADD",436,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24649,"frame":127,"instruction":["ADD",437,733,"-2",127],"op":"ADD"}]},"decompressed_bytes_observed":783652,"decompressed_hard_cap":16777216,"decompressed_source_sha256":"6b12b2e35a19212233e50c0d107591cb3fa395f4d771d106668f05eb4ce5fb1b","donor_W_Z":{"W":{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"op":"ADD"},"Z":{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"op":"ADD"},"p":1,"r":1,"spaces":{"597":[82],"652":[82,268]}},"fallback_search":false,"full_pricing_or_compiler_run":false,"helpers":535,"instruction_count":25448,"interpretation":"Only a necessary physical/economic prerequisite. Descriptor preservation is not independent endpoint/native admission.","native_phase_checked":false,"new_kappa":null,"new_routes":{"586":{"coalesced_visits":[3,652,773,774,910,127],"edges":[{"new":652,"old":3,"rank":2,"strict_forward":true},{"new":773,"old":652,"rank":2,"strict_forward":true},{"new":774,"old":773,"rank":2,"strict_forward":true},{"new":910,"old":774,"rank":1,"strict_forward":true},{"new":127,"old":910,"rank":2,"strict_forward":true}],"required":[{"frame":3,"kind":"input"},{"access":["source"],"event":112,"frame":3,"instruction":["ADD",123,586,"-1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":114,"frame":3,"instruction":["ADD",148,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":116,"frame":3,"instruction":["ADD",175,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":118,"frame":3,"instruction":["ADD",182,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":120,"frame":3,"instruction":["ADD",203,586,"-1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":122,"frame":3,"instruction":["ADD",223,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13791,"frame":3,"instruction":["ADD",197,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13792,"frame":3,"instruction":["ADD",147,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":14187,"frame":3,"instruction":["ADD",165,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["destination"],"event":14189,"frame":652,"instruction":["ADD",586,733,"-4",652],"kind":"contact","op":"ADD"},{"access":["source"],"event":14192,"frame":652,"instruction":["ADD",21,586,"1",652],"kind":"contact","op":"ADD"},{"access":["destination"],"event":14818,"frame":773,"instruction":["ADD",586,436,"1",773],"kind":"contact","op":"ADD"},{"access":["source"],"event":14821,"frame":774,"instruction":["ADD",351,586,"-1/2",774],"kind":"contact","op":"ADD"},{"access":["source"],"event":15475,"frame":910,"instruction":["ADD",197,586,"-1/2",910],"kind":"contact","op":"ADD"},{"access":["source"],"event":16714,"frame":127,"instruction":["ADD",351,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":16782,"frame":127,"instruction":["ADD",586,436,"-1",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24633,"frame":127,"instruction":["ADD",21,586,"-1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24636,"frame":127,"instruction":["ADD",47,586,"-1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24639,"frame":127,"instruction":["ADD",434,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24642,"frame":127,"instruction":["ADD",435,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24645,"frame":127,"instruction":["ADD",436,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24648,"frame":127,"instruction":["ADD",437,586,"1/2",127],"kind":"contact","op":"ADD"},{"frame":127,"kind":"final"}],"unsupported_edges":[]},"733":{"coalesced_visits":[3,597,652,597,794,911,127],"edges":[{"new":597,"old":3,"rank":1,"strict_forward":true},{"new":652,"old":597,"rank":1,"strict_forward":true},{"new":597,"old":652,"rank":-1,"strict_forward":false},{"new":794,"old":597,"rank":5,"strict_forward":true},{"new":911,"old":794,"rank":1,"strict_forward":true},{"new":127,"old":911,"rank":2,"strict_forward":true}],"required":[{"frame":3,"kind":"input"},{"access":["source"],"event":113,"frame":3,"instruction":["ADD",123,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":115,"frame":3,"instruction":["ADD",148,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":117,"frame":3,"instruction":["ADD",175,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":119,"frame":3,"instruction":["ADD",182,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":121,"frame":3,"instruction":["ADD",203,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":123,"frame":3,"instruction":["ADD",223,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":242,"frame":3,"instruction":["ADD",127,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":271,"frame":3,"instruction":["ADD",132,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":286,"frame":3,"instruction":["ADD",136,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":322,"frame":3,"instruction":["ADD",140,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":357,"frame":3,"instruction":["ADD",144,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":370,"frame":3,"instruction":["ADD",147,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":402,"frame":3,"instruction":["ADD",153,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":441,"frame":3,"instruction":["ADD",157,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":444,"frame":3,"instruction":["ADD",158,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":457,"frame":3,"instruction":["ADD",160,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":489,"frame":3,"instruction":["ADD",165,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":537,"frame":3,"instruction":["ADD",170,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":640,"frame":3,"instruction":["ADD",183,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":666,"frame":3,"instruction":["ADD",187,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":723,"frame":3,"instruction":["ADD",194,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":750,"frame":3,"instruction":["ADD",197,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":792,"frame":3,"instruction":["ADD",202,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":857,"frame":3,"instruction":["ADD",210,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":913,"frame":3,"instruction":["ADD",218,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":928,"frame":3,"instruction":["ADD",219,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13119,"frame":3,"instruction":["ADD",695,733,"-1",3],"kind":"contact","op":"ADD"},{"access":["destination"],"event":13552,"frame":597,"instruction":["ADD",733,746,"1",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14189,"frame":652,"instruction":["ADD",586,733,"-4",652],"kind":"contact","op":"ADD"},{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14812,"frame":597,"instruction":["ADD",585,733,"-4",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14885,"frame":794,"instruction":["ADD",140,733,"2",794],"kind":"contact","op":"ADD"},{"access":["source"],"event":15467,"frame":911,"instruction":["ADD",144,733,"2",911],"kind":"contact","op":"ADD"},{"access":["source"],"event":17246,"frame":127,"instruction":["ADD",585,733,"4",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":17457,"frame":127,"instruction":["ADD",733,133,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24634,"frame":127,"instruction":["ADD",21,733,"2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24637,"frame":127,"instruction":["ADD",47,733,"2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24640,"frame":127,"instruction":["ADD",434,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24643,"frame":127,"instruction":["ADD",435,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24646,"frame":127,"instruction":["ADD",436,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24649,"frame":127,"instruction":["ADD",437,733,"-2",127],"kind":"contact","op":"ADD"},{"frame":127,"kind":"final"}],"unsupported_edges":[{"new":597,"old":652,"rank":-1,"strict_forward":false}]}},"old_routes":{"586":{"coalesced_visits":[3,597,652,773,774,910,127],"edges":[{"new":597,"old":3,"rank":1,"strict_forward":true},{"new":652,"old":597,"rank":1,"strict_forward":true},{"new":773,"old":652,"rank":2,"strict_forward":true},{"new":774,"old":773,"rank":2,"strict_forward":true},{"new":910,"old":774,"rank":1,"strict_forward":true},{"new":127,"old":910,"rank":2,"strict_forward":true}],"required":[{"frame":3,"kind":"input"},{"access":["source"],"event":112,"frame":3,"instruction":["ADD",123,586,"-1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":114,"frame":3,"instruction":["ADD",148,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":116,"frame":3,"instruction":["ADD",175,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":118,"frame":3,"instruction":["ADD",182,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":120,"frame":3,"instruction":["ADD",203,586,"-1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":122,"frame":3,"instruction":["ADD",223,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13791,"frame":3,"instruction":["ADD",197,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13792,"frame":3,"instruction":["ADD",147,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":14187,"frame":3,"instruction":["ADD",165,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["destination"],"event":14189,"frame":597,"instruction":["ADD",586,733,"-4",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14192,"frame":652,"instruction":["ADD",21,586,"1",652],"kind":"contact","op":"ADD"},{"access":["destination"],"event":14818,"frame":773,"instruction":["ADD",586,436,"1",773],"kind":"contact","op":"ADD"},{"access":["source"],"event":14821,"frame":774,"instruction":["ADD",351,586,"-1/2",774],"kind":"contact","op":"ADD"},{"access":["source"],"event":15475,"frame":910,"instruction":["ADD",197,586,"-1/2",910],"kind":"contact","op":"ADD"},{"access":["source"],"event":16714,"frame":127,"instruction":["ADD",351,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":16782,"frame":127,"instruction":["ADD",586,436,"-1",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24633,"frame":127,"instruction":["ADD",21,586,"-1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24636,"frame":127,"instruction":["ADD",47,586,"-1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24639,"frame":127,"instruction":["ADD",434,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24642,"frame":127,"instruction":["ADD",435,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24645,"frame":127,"instruction":["ADD",436,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24648,"frame":127,"instruction":["ADD",437,586,"1/2",127],"kind":"contact","op":"ADD"},{"frame":127,"kind":"final"}],"unsupported_edges":[]},"733":{"coalesced_visits":[3,597,794,911,127],"edges":[{"new":597,"old":3,"rank":1,"strict_forward":true},{"new":794,"old":597,"rank":5,"strict_forward":true},{"new":911,"old":794,"rank":1,"strict_forward":true},{"new":127,"old":911,"rank":2,"strict_forward":true}],"required":[{"frame":3,"kind":"input"},{"access":["source"],"event":113,"frame":3,"instruction":["ADD",123,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":115,"frame":3,"instruction":["ADD",148,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":117,"frame":3,"instruction":["ADD",175,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":119,"frame":3,"instruction":["ADD",182,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":121,"frame":3,"instruction":["ADD",203,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":123,"frame":3,"instruction":["ADD",223,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":242,"frame":3,"instruction":["ADD",127,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":271,"frame":3,"instruction":["ADD",132,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":286,"frame":3,"instruction":["ADD",136,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":322,"frame":3,"instruction":["ADD",140,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":357,"frame":3,"instruction":["ADD",144,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":370,"frame":3,"instruction":["ADD",147,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":402,"frame":3,"instruction":["ADD",153,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":441,"frame":3,"instruction":["ADD",157,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":444,"frame":3,"instruction":["ADD",158,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":457,"frame":3,"instruction":["ADD",160,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":489,"frame":3,"instruction":["ADD",165,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":537,"frame":3,"instruction":["ADD",170,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":640,"frame":3,"instruction":["ADD",183,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":666,"frame":3,"instruction":["ADD",187,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":723,"frame":3,"instruction":["ADD",194,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":750,"frame":3,"instruction":["ADD",197,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":792,"frame":3,"instruction":["ADD",202,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":857,"frame":3,"instruction":["ADD",210,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":913,"frame":3,"instruction":["ADD",218,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":928,"frame":3,"instruction":["ADD",219,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13119,"frame":3,"instruction":["ADD",695,733,"-1",3],"kind":"contact","op":"ADD"},{"access":["destination"],"event":13552,"frame":597,"instruction":["ADD",733,746,"1",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14189,"frame":597,"instruction":["ADD",586,733,"-4",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14812,"frame":597,"instruction":["ADD",585,733,"-4",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14885,"frame":794,"instruction":["ADD",140,733,"2",794],"kind":"contact","op":"ADD"},{"access":["source"],"event":15467,"frame":911,"instruction":["ADD",144,733,"2",911],"kind":"contact","op":"ADD"},{"access":["source"],"event":17246,"frame":127,"instruction":["ADD",585,733,"4",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":17457,"frame":127,"instruction":["ADD",733,133,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24634,"frame":127,"instruction":["ADD",21,733,"2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24637,"frame":127,"instruction":["ADD",47,733,"2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24640,"frame":127,"instruction":["ADD",434,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24643,"frame":127,"instruction":["ADD",435,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24646,"frame":127,"instruction":["ADD",436,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24649,"frame":127,"instruction":["ADD",437,733,"-2",127],"kind":"contact","op":"ADD"},{"frame":127,"kind":"final"}],"unsupported_edges":[]}},"ordinary_costs_certified":false,"physical_construction":null,"public_inputs":743,"schema":"one-h586-chart-retag-feasibility/v1","scope":"Only one chart in two required-contact lists; no chronology/basis/boundary/owned changes or route search.","source_MOVE_chains":{"586":[{"event":14188,"new":597,"old":3,"rank":1},{"event":14191,"new":652,"old":597,"rank":1},{"event":14817,"new":773,"old":652,"rank":2},{"event":14820,"new":774,"old":773,"rank":2},{"event":15474,"new":910,"old":774,"rank":1},{"event":16713,"new":127,"old":910,"rank":2}],"733":[{"event":13551,"new":597,"old":3,"rank":1},{"event":14884,"new":794,"old":597,"rank":5},{"event":15466,"new":911,"old":794,"rank":1},{"event":17245,"new":127,"old":911,"rank":2}]},"source_contacts":{"586":[{"access":["source"],"event":112,"frame":3,"instruction":["ADD",123,586,"-1/2",3],"op":"ADD"},{"access":["source"],"event":114,"frame":3,"instruction":["ADD",148,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":116,"frame":3,"instruction":["ADD",175,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":118,"frame":3,"instruction":["ADD",182,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":120,"frame":3,"instruction":["ADD",203,586,"-1/2",3],"op":"ADD"},{"access":["source"],"event":122,"frame":3,"instruction":["ADD",223,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":13791,"frame":3,"instruction":["ADD",197,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":13792,"frame":3,"instruction":["ADD",147,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":14187,"frame":3,"instruction":["ADD",165,586,"1/2",3],"op":"ADD"},{"access":["destination"],"event":14189,"frame":597,"instruction":["ADD",586,733,"-4",597],"op":"ADD"},{"access":["source"],"event":14192,"frame":652,"instruction":["ADD",21,586,"1",652],"op":"ADD"},{"access":["destination"],"event":14818,"frame":773,"instruction":["ADD",586,436,"1",773],"op":"ADD"},{"access":["source"],"event":14821,"frame":774,"instruction":["ADD",351,586,"-1/2",774],"op":"ADD"},{"access":["source"],"event":15475,"frame":910,"instruction":["ADD",197,586,"-1/2",910],"op":"ADD"},{"access":["source"],"event":16714,"frame":127,"instruction":["ADD",351,586,"1/2",127],"op":"ADD"},{"access":["destination"],"event":16782,"frame":127,"instruction":["ADD",586,436,"-1",127],"op":"ADD"},{"access":["destination"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"op":"ADD"},{"access":["source"],"event":24633,"frame":127,"instruction":["ADD",21,586,"-1/2",127],"op":"ADD"},{"access":["source"],"event":24636,"frame":127,"instruction":["ADD",47,586,"-1/2",127],"op":"ADD"},{"access":["source"],"event":24639,"frame":127,"instruction":["ADD",434,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24642,"frame":127,"instruction":["ADD",435,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24645,"frame":127,"instruction":["ADD",436,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24648,"frame":127,"instruction":["ADD",437,586,"1/2",127],"op":"ADD"}],"733":[{"access":["source"],"event":113,"frame":3,"instruction":["ADD",123,733,"2",3],"op":"ADD"},{"access":["source"],"event":115,"frame":3,"instruction":["ADD",148,733,"-2",3],"op":"ADD"},{"access":["source"],"event":117,"frame":3,"instruction":["ADD",175,733,"-2",3],"op":"ADD"},{"access":["source"],"event":119,"frame":3,"instruction":["ADD",182,733,"-2",3],"op":"ADD"},{"access":["source"],"event":121,"frame":3,"instruction":["ADD",203,733,"2",3],"op":"ADD"},{"access":["source"],"event":123,"frame":3,"instruction":["ADD",223,733,"-2",3],"op":"ADD"},{"access":["source"],"event":242,"frame":3,"instruction":["ADD",127,733,"-2",3],"op":"ADD"},{"access":["source"],"event":271,"frame":3,"instruction":["ADD",132,733,"-2",3],"op":"ADD"},{"access":["source"],"event":286,"frame":3,"instruction":["ADD",136,733,"2",3],"op":"ADD"},{"access":["source"],"event":322,"frame":3,"instruction":["ADD",140,733,"2",3],"op":"ADD"},{"access":["source"],"event":357,"frame":3,"instruction":["ADD",144,733,"2",3],"op":"ADD"},{"access":["source"],"event":370,"frame":3,"instruction":["ADD",147,733,"2",3],"op":"ADD"},{"access":["source"],"event":402,"frame":3,"instruction":["ADD",153,733,"-2",3],"op":"ADD"},{"access":["source"],"event":441,"frame":3,"instruction":["ADD",157,733,"-2",3],"op":"ADD"},{"access":["source"],"event":444,"frame":3,"instruction":["ADD",158,733,"-2",3],"op":"ADD"},{"access":["source"],"event":457,"frame":3,"instruction":["ADD",160,733,"-2",3],"op":"ADD"},{"access":["source"],"event":489,"frame":3,"instruction":["ADD",165,733,"2",3],"op":"ADD"},{"access":["source"],"event":537,"frame":3,"instruction":["ADD",170,733,"-2",3],"op":"ADD"},{"access":["source"],"event":640,"frame":3,"instruction":["ADD",183,733,"-2",3],"op":"ADD"},{"access":["source"],"event":666,"frame":3,"instruction":["ADD",187,733,"2",3],"op":"ADD"},{"access":["source"],"event":723,"frame":3,"instruction":["ADD",194,733,"-2",3],"op":"ADD"},{"access":["source"],"event":750,"frame":3,"instruction":["ADD",197,733,"2",3],"op":"ADD"},{"access":["source"],"event":792,"frame":3,"instruction":["ADD",202,733,"2",3],"op":"ADD"},{"access":["source"],"event":857,"frame":3,"instruction":["ADD",210,733,"-2",3],"op":"ADD"},{"access":["source"],"event":913,"frame":3,"instruction":["ADD",218,733,"2",3],"op":"ADD"},{"access":["source"],"event":928,"frame":3,"instruction":["ADD",219,733,"-2",3],"op":"ADD"},{"access":["source"],"event":13119,"frame":3,"instruction":["ADD",695,733,"-1",3],"op":"ADD"},{"access":["destination"],"event":13552,"frame":597,"instruction":["ADD",733,746,"1",597],"op":"ADD"},{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"op":"ADD"},{"access":["source"],"event":14189,"frame":597,"instruction":["ADD",586,733,"-4",597],"op":"ADD"},{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"op":"ADD"},{"access":["source"],"event":14812,"frame":597,"instruction":["ADD",585,733,"-4",597],"op":"ADD"},{"access":["source"],"event":14885,"frame":794,"instruction":["ADD",140,733,"2",794],"op":"ADD"},{"access":["source"],"event":15467,"frame":911,"instruction":["ADD",144,733,"2",911],"op":"ADD"},{"access":["source"],"event":17246,"frame":127,"instruction":["ADD",585,733,"4",127],"op":"ADD"},{"access":["source"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"op":"ADD"},{"access":["destination"],"event":17457,"frame":127,"instruction":["ADD",733,133,"1/2",127],"op":"ADD"},{"access":["source"],"event":24634,"frame":127,"instruction":["ADD",21,733,"2",127],"op":"ADD"},{"access":["source"],"event":24637,"frame":127,"instruction":["ADD",47,733,"2",127],"op":"ADD"},{"access":["source"],"event":24640,"frame":127,"instruction":["ADD",434,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24643,"frame":127,"instruction":["ADD",435,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24646,"frame":127,"instruction":["ADD",436,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24649,"frame":127,"instruction":["ADD",437,733,"-2",127],"op":"ADD"}]},"source_descriptor_checks":{"owned_lifetimes":11,"owned_subsequence_sha256":"1afa800e329de0d600778f8f5de448cd3a06c391d0763b45922461d94b913a9b","peak_owned":2,"public_boundary_descriptor_sha256":"564caeb99e67d04a7194fe99e84f947329d4c01fc37226078f086ae38b0f84e2","scalar_opcode_roles_coefficients_order_sha256":"8b18004534646ec44cd7044ef07f7e90853dc2572d7c96c6c735b54478578436","scope":"Descriptor and chart/lifetime chronology checks only; no endpoint linear-map, erasure-zero or native phase replay.","unmodified_nonprogram_descriptor_sha256":"32721f16106a0ba0d0c31ee943ee835086ac1ffbda627976280827dc84ac2e11"},"source_head":"3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa","source_modules_imported":false,"source_schema":"p104-contact-rewrite/1","source_word_git_blob":"9e68b7de6bfc23bc4fe9940c718dba350ba8a893","source_word_sha256":"9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6","status":"STOP_UNSUPPORTED_FORWARD_NESTING","stop_reason":"The one fixed new direct route is not strictly forward in the exact source spaces.","unique_final_block":{"actual_program_indices":[14187,14189,14192,14194],"events":[["ADD",165,586,"1/2",3],["ADD",586,733,"-4",597],["ADD",21,586,"1",652],["ADD",165,21,"-1/2",652]],"old_indices_transferred":false,"skeleton_index":12752,"skeleton_keeps_owned_MOVEs":true},"unsupported_edges":{"733":[{"new":597,"old":652,"rank":-1,"strict_forward":false}]}} diff --git a/research/p104-chart-contact-obstruction/evidence/RESULT-optimized.json b/research/p104-chart-contact-obstruction/evidence/RESULT-optimized.json new file mode 100644 index 0000000000..8ec86b5ed0 --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/RESULT-optimized.json @@ -0,0 +1 @@ +{"arbitrary_input_endpoint_replay":false,"baseline_complete_paid":{"1":41070,"16":416,"2":8244,"24":416,"3":8874,"32":416,"4":1638,"40":416,"48":416,"5":2862,"56":416,"6":396,"64":416,"7":270,"72":208},"baseline_complete_targets":{"1":36,"145":208,"17":416,"2":72,"25":416,"33":416,"4":1638,"41":416,"49":416,"5":108,"57":416,"65":416,"7":90,"73":208,"8":288,"9":7398},"baseline_invoice_status":"Published authenticated receipt; no whole-source paid census or price replay.","candidate_paid_invoice":null,"changed_full_word_emitted":false,"controls":{"ambiguous_anchor":{"outcome":"rejected","strength":"Duplicate match-evidence cardinality; no changed full program"},"compressed_byte_corruption":{"outcome":"rejected","strength":"Immutable byte/Git/SHA corruption; no mutated decode"},"omitted_donor_charge":{"outcome":"rejected","strength":"Omit one actual donor old-MOVE charge while recipient/new bill held fixed"},"reversed_nesting":{"outcome":"rejected","strength":"Actual reverse inclusion of fixed source spaces"},"wrong_anchor_chart":{"outcome":"rejected","strength":"Actual four-gate binding field mutation"},"wrong_frame_space":{"outcome":"rejected","strength":"Ordered frame basis mutation"},"wrong_source_binding":{"outcome":"rejected","strength":"Exact source-head custody mutation"}},"counterfactual_contact_lists":{"586":[{"access":["source"],"event":112,"frame":3,"instruction":["ADD",123,586,"-1/2",3],"op":"ADD"},{"access":["source"],"event":114,"frame":3,"instruction":["ADD",148,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":116,"frame":3,"instruction":["ADD",175,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":118,"frame":3,"instruction":["ADD",182,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":120,"frame":3,"instruction":["ADD",203,586,"-1/2",3],"op":"ADD"},{"access":["source"],"event":122,"frame":3,"instruction":["ADD",223,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":13791,"frame":3,"instruction":["ADD",197,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":13792,"frame":3,"instruction":["ADD",147,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":14187,"frame":3,"instruction":["ADD",165,586,"1/2",3],"op":"ADD"},{"access":["destination"],"event":14189,"frame":652,"instruction":["ADD",586,733,"-4",652],"op":"ADD"},{"access":["source"],"event":14192,"frame":652,"instruction":["ADD",21,586,"1",652],"op":"ADD"},{"access":["destination"],"event":14818,"frame":773,"instruction":["ADD",586,436,"1",773],"op":"ADD"},{"access":["source"],"event":14821,"frame":774,"instruction":["ADD",351,586,"-1/2",774],"op":"ADD"},{"access":["source"],"event":15475,"frame":910,"instruction":["ADD",197,586,"-1/2",910],"op":"ADD"},{"access":["source"],"event":16714,"frame":127,"instruction":["ADD",351,586,"1/2",127],"op":"ADD"},{"access":["destination"],"event":16782,"frame":127,"instruction":["ADD",586,436,"-1",127],"op":"ADD"},{"access":["destination"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"op":"ADD"},{"access":["source"],"event":24633,"frame":127,"instruction":["ADD",21,586,"-1/2",127],"op":"ADD"},{"access":["source"],"event":24636,"frame":127,"instruction":["ADD",47,586,"-1/2",127],"op":"ADD"},{"access":["source"],"event":24639,"frame":127,"instruction":["ADD",434,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24642,"frame":127,"instruction":["ADD",435,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24645,"frame":127,"instruction":["ADD",436,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24648,"frame":127,"instruction":["ADD",437,586,"1/2",127],"op":"ADD"}],"733":[{"access":["source"],"event":113,"frame":3,"instruction":["ADD",123,733,"2",3],"op":"ADD"},{"access":["source"],"event":115,"frame":3,"instruction":["ADD",148,733,"-2",3],"op":"ADD"},{"access":["source"],"event":117,"frame":3,"instruction":["ADD",175,733,"-2",3],"op":"ADD"},{"access":["source"],"event":119,"frame":3,"instruction":["ADD",182,733,"-2",3],"op":"ADD"},{"access":["source"],"event":121,"frame":3,"instruction":["ADD",203,733,"2",3],"op":"ADD"},{"access":["source"],"event":123,"frame":3,"instruction":["ADD",223,733,"-2",3],"op":"ADD"},{"access":["source"],"event":242,"frame":3,"instruction":["ADD",127,733,"-2",3],"op":"ADD"},{"access":["source"],"event":271,"frame":3,"instruction":["ADD",132,733,"-2",3],"op":"ADD"},{"access":["source"],"event":286,"frame":3,"instruction":["ADD",136,733,"2",3],"op":"ADD"},{"access":["source"],"event":322,"frame":3,"instruction":["ADD",140,733,"2",3],"op":"ADD"},{"access":["source"],"event":357,"frame":3,"instruction":["ADD",144,733,"2",3],"op":"ADD"},{"access":["source"],"event":370,"frame":3,"instruction":["ADD",147,733,"2",3],"op":"ADD"},{"access":["source"],"event":402,"frame":3,"instruction":["ADD",153,733,"-2",3],"op":"ADD"},{"access":["source"],"event":441,"frame":3,"instruction":["ADD",157,733,"-2",3],"op":"ADD"},{"access":["source"],"event":444,"frame":3,"instruction":["ADD",158,733,"-2",3],"op":"ADD"},{"access":["source"],"event":457,"frame":3,"instruction":["ADD",160,733,"-2",3],"op":"ADD"},{"access":["source"],"event":489,"frame":3,"instruction":["ADD",165,733,"2",3],"op":"ADD"},{"access":["source"],"event":537,"frame":3,"instruction":["ADD",170,733,"-2",3],"op":"ADD"},{"access":["source"],"event":640,"frame":3,"instruction":["ADD",183,733,"-2",3],"op":"ADD"},{"access":["source"],"event":666,"frame":3,"instruction":["ADD",187,733,"2",3],"op":"ADD"},{"access":["source"],"event":723,"frame":3,"instruction":["ADD",194,733,"-2",3],"op":"ADD"},{"access":["source"],"event":750,"frame":3,"instruction":["ADD",197,733,"2",3],"op":"ADD"},{"access":["source"],"event":792,"frame":3,"instruction":["ADD",202,733,"2",3],"op":"ADD"},{"access":["source"],"event":857,"frame":3,"instruction":["ADD",210,733,"-2",3],"op":"ADD"},{"access":["source"],"event":913,"frame":3,"instruction":["ADD",218,733,"2",3],"op":"ADD"},{"access":["source"],"event":928,"frame":3,"instruction":["ADD",219,733,"-2",3],"op":"ADD"},{"access":["source"],"event":13119,"frame":3,"instruction":["ADD",695,733,"-1",3],"op":"ADD"},{"access":["destination"],"event":13552,"frame":597,"instruction":["ADD",733,746,"1",597],"op":"ADD"},{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"op":"ADD"},{"access":["source"],"event":14189,"frame":652,"instruction":["ADD",586,733,"-4",652],"op":"ADD"},{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"op":"ADD"},{"access":["source"],"event":14812,"frame":597,"instruction":["ADD",585,733,"-4",597],"op":"ADD"},{"access":["source"],"event":14885,"frame":794,"instruction":["ADD",140,733,"2",794],"op":"ADD"},{"access":["source"],"event":15467,"frame":911,"instruction":["ADD",144,733,"2",911],"op":"ADD"},{"access":["source"],"event":17246,"frame":127,"instruction":["ADD",585,733,"4",127],"op":"ADD"},{"access":["source"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"op":"ADD"},{"access":["destination"],"event":17457,"frame":127,"instruction":["ADD",733,133,"1/2",127],"op":"ADD"},{"access":["source"],"event":24634,"frame":127,"instruction":["ADD",21,733,"2",127],"op":"ADD"},{"access":["source"],"event":24637,"frame":127,"instruction":["ADD",47,733,"2",127],"op":"ADD"},{"access":["source"],"event":24640,"frame":127,"instruction":["ADD",434,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24643,"frame":127,"instruction":["ADD",435,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24646,"frame":127,"instruction":["ADD",436,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24649,"frame":127,"instruction":["ADD",437,733,"-2",127],"op":"ADD"}]},"decompressed_bytes_observed":783652,"decompressed_hard_cap":16777216,"decompressed_source_sha256":"6b12b2e35a19212233e50c0d107591cb3fa395f4d771d106668f05eb4ce5fb1b","donor_W_Z":{"W":{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"op":"ADD"},"Z":{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"op":"ADD"},"p":1,"r":1,"spaces":{"597":[82],"652":[82,268]}},"fallback_search":false,"full_pricing_or_compiler_run":false,"helpers":535,"instruction_count":25448,"interpretation":"Only a necessary physical/economic prerequisite. Descriptor preservation is not independent endpoint/native admission.","native_phase_checked":false,"new_kappa":null,"new_routes":{"586":{"coalesced_visits":[3,652,773,774,910,127],"edges":[{"new":652,"old":3,"rank":2,"strict_forward":true},{"new":773,"old":652,"rank":2,"strict_forward":true},{"new":774,"old":773,"rank":2,"strict_forward":true},{"new":910,"old":774,"rank":1,"strict_forward":true},{"new":127,"old":910,"rank":2,"strict_forward":true}],"required":[{"frame":3,"kind":"input"},{"access":["source"],"event":112,"frame":3,"instruction":["ADD",123,586,"-1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":114,"frame":3,"instruction":["ADD",148,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":116,"frame":3,"instruction":["ADD",175,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":118,"frame":3,"instruction":["ADD",182,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":120,"frame":3,"instruction":["ADD",203,586,"-1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":122,"frame":3,"instruction":["ADD",223,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13791,"frame":3,"instruction":["ADD",197,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13792,"frame":3,"instruction":["ADD",147,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":14187,"frame":3,"instruction":["ADD",165,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["destination"],"event":14189,"frame":652,"instruction":["ADD",586,733,"-4",652],"kind":"contact","op":"ADD"},{"access":["source"],"event":14192,"frame":652,"instruction":["ADD",21,586,"1",652],"kind":"contact","op":"ADD"},{"access":["destination"],"event":14818,"frame":773,"instruction":["ADD",586,436,"1",773],"kind":"contact","op":"ADD"},{"access":["source"],"event":14821,"frame":774,"instruction":["ADD",351,586,"-1/2",774],"kind":"contact","op":"ADD"},{"access":["source"],"event":15475,"frame":910,"instruction":["ADD",197,586,"-1/2",910],"kind":"contact","op":"ADD"},{"access":["source"],"event":16714,"frame":127,"instruction":["ADD",351,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":16782,"frame":127,"instruction":["ADD",586,436,"-1",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24633,"frame":127,"instruction":["ADD",21,586,"-1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24636,"frame":127,"instruction":["ADD",47,586,"-1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24639,"frame":127,"instruction":["ADD",434,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24642,"frame":127,"instruction":["ADD",435,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24645,"frame":127,"instruction":["ADD",436,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24648,"frame":127,"instruction":["ADD",437,586,"1/2",127],"kind":"contact","op":"ADD"},{"frame":127,"kind":"final"}],"unsupported_edges":[]},"733":{"coalesced_visits":[3,597,652,597,794,911,127],"edges":[{"new":597,"old":3,"rank":1,"strict_forward":true},{"new":652,"old":597,"rank":1,"strict_forward":true},{"new":597,"old":652,"rank":-1,"strict_forward":false},{"new":794,"old":597,"rank":5,"strict_forward":true},{"new":911,"old":794,"rank":1,"strict_forward":true},{"new":127,"old":911,"rank":2,"strict_forward":true}],"required":[{"frame":3,"kind":"input"},{"access":["source"],"event":113,"frame":3,"instruction":["ADD",123,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":115,"frame":3,"instruction":["ADD",148,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":117,"frame":3,"instruction":["ADD",175,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":119,"frame":3,"instruction":["ADD",182,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":121,"frame":3,"instruction":["ADD",203,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":123,"frame":3,"instruction":["ADD",223,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":242,"frame":3,"instruction":["ADD",127,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":271,"frame":3,"instruction":["ADD",132,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":286,"frame":3,"instruction":["ADD",136,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":322,"frame":3,"instruction":["ADD",140,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":357,"frame":3,"instruction":["ADD",144,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":370,"frame":3,"instruction":["ADD",147,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":402,"frame":3,"instruction":["ADD",153,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":441,"frame":3,"instruction":["ADD",157,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":444,"frame":3,"instruction":["ADD",158,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":457,"frame":3,"instruction":["ADD",160,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":489,"frame":3,"instruction":["ADD",165,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":537,"frame":3,"instruction":["ADD",170,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":640,"frame":3,"instruction":["ADD",183,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":666,"frame":3,"instruction":["ADD",187,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":723,"frame":3,"instruction":["ADD",194,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":750,"frame":3,"instruction":["ADD",197,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":792,"frame":3,"instruction":["ADD",202,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":857,"frame":3,"instruction":["ADD",210,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":913,"frame":3,"instruction":["ADD",218,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":928,"frame":3,"instruction":["ADD",219,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13119,"frame":3,"instruction":["ADD",695,733,"-1",3],"kind":"contact","op":"ADD"},{"access":["destination"],"event":13552,"frame":597,"instruction":["ADD",733,746,"1",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14189,"frame":652,"instruction":["ADD",586,733,"-4",652],"kind":"contact","op":"ADD"},{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14812,"frame":597,"instruction":["ADD",585,733,"-4",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14885,"frame":794,"instruction":["ADD",140,733,"2",794],"kind":"contact","op":"ADD"},{"access":["source"],"event":15467,"frame":911,"instruction":["ADD",144,733,"2",911],"kind":"contact","op":"ADD"},{"access":["source"],"event":17246,"frame":127,"instruction":["ADD",585,733,"4",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":17457,"frame":127,"instruction":["ADD",733,133,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24634,"frame":127,"instruction":["ADD",21,733,"2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24637,"frame":127,"instruction":["ADD",47,733,"2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24640,"frame":127,"instruction":["ADD",434,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24643,"frame":127,"instruction":["ADD",435,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24646,"frame":127,"instruction":["ADD",436,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24649,"frame":127,"instruction":["ADD",437,733,"-2",127],"kind":"contact","op":"ADD"},{"frame":127,"kind":"final"}],"unsupported_edges":[{"new":597,"old":652,"rank":-1,"strict_forward":false}]}},"old_routes":{"586":{"coalesced_visits":[3,597,652,773,774,910,127],"edges":[{"new":597,"old":3,"rank":1,"strict_forward":true},{"new":652,"old":597,"rank":1,"strict_forward":true},{"new":773,"old":652,"rank":2,"strict_forward":true},{"new":774,"old":773,"rank":2,"strict_forward":true},{"new":910,"old":774,"rank":1,"strict_forward":true},{"new":127,"old":910,"rank":2,"strict_forward":true}],"required":[{"frame":3,"kind":"input"},{"access":["source"],"event":112,"frame":3,"instruction":["ADD",123,586,"-1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":114,"frame":3,"instruction":["ADD",148,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":116,"frame":3,"instruction":["ADD",175,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":118,"frame":3,"instruction":["ADD",182,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":120,"frame":3,"instruction":["ADD",203,586,"-1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":122,"frame":3,"instruction":["ADD",223,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13791,"frame":3,"instruction":["ADD",197,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13792,"frame":3,"instruction":["ADD",147,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":14187,"frame":3,"instruction":["ADD",165,586,"1/2",3],"kind":"contact","op":"ADD"},{"access":["destination"],"event":14189,"frame":597,"instruction":["ADD",586,733,"-4",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14192,"frame":652,"instruction":["ADD",21,586,"1",652],"kind":"contact","op":"ADD"},{"access":["destination"],"event":14818,"frame":773,"instruction":["ADD",586,436,"1",773],"kind":"contact","op":"ADD"},{"access":["source"],"event":14821,"frame":774,"instruction":["ADD",351,586,"-1/2",774],"kind":"contact","op":"ADD"},{"access":["source"],"event":15475,"frame":910,"instruction":["ADD",197,586,"-1/2",910],"kind":"contact","op":"ADD"},{"access":["source"],"event":16714,"frame":127,"instruction":["ADD",351,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":16782,"frame":127,"instruction":["ADD",586,436,"-1",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24633,"frame":127,"instruction":["ADD",21,586,"-1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24636,"frame":127,"instruction":["ADD",47,586,"-1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24639,"frame":127,"instruction":["ADD",434,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24642,"frame":127,"instruction":["ADD",435,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24645,"frame":127,"instruction":["ADD",436,586,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24648,"frame":127,"instruction":["ADD",437,586,"1/2",127],"kind":"contact","op":"ADD"},{"frame":127,"kind":"final"}],"unsupported_edges":[]},"733":{"coalesced_visits":[3,597,794,911,127],"edges":[{"new":597,"old":3,"rank":1,"strict_forward":true},{"new":794,"old":597,"rank":5,"strict_forward":true},{"new":911,"old":794,"rank":1,"strict_forward":true},{"new":127,"old":911,"rank":2,"strict_forward":true}],"required":[{"frame":3,"kind":"input"},{"access":["source"],"event":113,"frame":3,"instruction":["ADD",123,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":115,"frame":3,"instruction":["ADD",148,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":117,"frame":3,"instruction":["ADD",175,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":119,"frame":3,"instruction":["ADD",182,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":121,"frame":3,"instruction":["ADD",203,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":123,"frame":3,"instruction":["ADD",223,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":242,"frame":3,"instruction":["ADD",127,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":271,"frame":3,"instruction":["ADD",132,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":286,"frame":3,"instruction":["ADD",136,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":322,"frame":3,"instruction":["ADD",140,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":357,"frame":3,"instruction":["ADD",144,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":370,"frame":3,"instruction":["ADD",147,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":402,"frame":3,"instruction":["ADD",153,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":441,"frame":3,"instruction":["ADD",157,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":444,"frame":3,"instruction":["ADD",158,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":457,"frame":3,"instruction":["ADD",160,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":489,"frame":3,"instruction":["ADD",165,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":537,"frame":3,"instruction":["ADD",170,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":640,"frame":3,"instruction":["ADD",183,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":666,"frame":3,"instruction":["ADD",187,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":723,"frame":3,"instruction":["ADD",194,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":750,"frame":3,"instruction":["ADD",197,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":792,"frame":3,"instruction":["ADD",202,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":857,"frame":3,"instruction":["ADD",210,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":913,"frame":3,"instruction":["ADD",218,733,"2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":928,"frame":3,"instruction":["ADD",219,733,"-2",3],"kind":"contact","op":"ADD"},{"access":["source"],"event":13119,"frame":3,"instruction":["ADD",695,733,"-1",3],"kind":"contact","op":"ADD"},{"access":["destination"],"event":13552,"frame":597,"instruction":["ADD",733,746,"1",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14189,"frame":597,"instruction":["ADD",586,733,"-4",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14812,"frame":597,"instruction":["ADD",585,733,"-4",597],"kind":"contact","op":"ADD"},{"access":["source"],"event":14885,"frame":794,"instruction":["ADD",140,733,"2",794],"kind":"contact","op":"ADD"},{"access":["source"],"event":15467,"frame":911,"instruction":["ADD",144,733,"2",911],"kind":"contact","op":"ADD"},{"access":["source"],"event":17246,"frame":127,"instruction":["ADD",585,733,"4",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"kind":"contact","op":"ADD"},{"access":["destination"],"event":17457,"frame":127,"instruction":["ADD",733,133,"1/2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24634,"frame":127,"instruction":["ADD",21,733,"2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24637,"frame":127,"instruction":["ADD",47,733,"2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24640,"frame":127,"instruction":["ADD",434,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24643,"frame":127,"instruction":["ADD",435,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24646,"frame":127,"instruction":["ADD",436,733,"-2",127],"kind":"contact","op":"ADD"},{"access":["source"],"event":24649,"frame":127,"instruction":["ADD",437,733,"-2",127],"kind":"contact","op":"ADD"},{"frame":127,"kind":"final"}],"unsupported_edges":[]}},"ordinary_costs_certified":false,"physical_construction":null,"public_inputs":743,"schema":"one-h586-chart-retag-feasibility/v1","scope":"Only one chart in two required-contact lists; no chronology/basis/boundary/owned changes or route search.","source_MOVE_chains":{"586":[{"event":14188,"new":597,"old":3,"rank":1},{"event":14191,"new":652,"old":597,"rank":1},{"event":14817,"new":773,"old":652,"rank":2},{"event":14820,"new":774,"old":773,"rank":2},{"event":15474,"new":910,"old":774,"rank":1},{"event":16713,"new":127,"old":910,"rank":2}],"733":[{"event":13551,"new":597,"old":3,"rank":1},{"event":14884,"new":794,"old":597,"rank":5},{"event":15466,"new":911,"old":794,"rank":1},{"event":17245,"new":127,"old":911,"rank":2}]},"source_contacts":{"586":[{"access":["source"],"event":112,"frame":3,"instruction":["ADD",123,586,"-1/2",3],"op":"ADD"},{"access":["source"],"event":114,"frame":3,"instruction":["ADD",148,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":116,"frame":3,"instruction":["ADD",175,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":118,"frame":3,"instruction":["ADD",182,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":120,"frame":3,"instruction":["ADD",203,586,"-1/2",3],"op":"ADD"},{"access":["source"],"event":122,"frame":3,"instruction":["ADD",223,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":13791,"frame":3,"instruction":["ADD",197,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":13792,"frame":3,"instruction":["ADD",147,586,"1/2",3],"op":"ADD"},{"access":["source"],"event":14187,"frame":3,"instruction":["ADD",165,586,"1/2",3],"op":"ADD"},{"access":["destination"],"event":14189,"frame":597,"instruction":["ADD",586,733,"-4",597],"op":"ADD"},{"access":["source"],"event":14192,"frame":652,"instruction":["ADD",21,586,"1",652],"op":"ADD"},{"access":["destination"],"event":14818,"frame":773,"instruction":["ADD",586,436,"1",773],"op":"ADD"},{"access":["source"],"event":14821,"frame":774,"instruction":["ADD",351,586,"-1/2",774],"op":"ADD"},{"access":["source"],"event":15475,"frame":910,"instruction":["ADD",197,586,"-1/2",910],"op":"ADD"},{"access":["source"],"event":16714,"frame":127,"instruction":["ADD",351,586,"1/2",127],"op":"ADD"},{"access":["destination"],"event":16782,"frame":127,"instruction":["ADD",586,436,"-1",127],"op":"ADD"},{"access":["destination"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"op":"ADD"},{"access":["source"],"event":24633,"frame":127,"instruction":["ADD",21,586,"-1/2",127],"op":"ADD"},{"access":["source"],"event":24636,"frame":127,"instruction":["ADD",47,586,"-1/2",127],"op":"ADD"},{"access":["source"],"event":24639,"frame":127,"instruction":["ADD",434,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24642,"frame":127,"instruction":["ADD",435,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24645,"frame":127,"instruction":["ADD",436,586,"1/2",127],"op":"ADD"},{"access":["source"],"event":24648,"frame":127,"instruction":["ADD",437,586,"1/2",127],"op":"ADD"}],"733":[{"access":["source"],"event":113,"frame":3,"instruction":["ADD",123,733,"2",3],"op":"ADD"},{"access":["source"],"event":115,"frame":3,"instruction":["ADD",148,733,"-2",3],"op":"ADD"},{"access":["source"],"event":117,"frame":3,"instruction":["ADD",175,733,"-2",3],"op":"ADD"},{"access":["source"],"event":119,"frame":3,"instruction":["ADD",182,733,"-2",3],"op":"ADD"},{"access":["source"],"event":121,"frame":3,"instruction":["ADD",203,733,"2",3],"op":"ADD"},{"access":["source"],"event":123,"frame":3,"instruction":["ADD",223,733,"-2",3],"op":"ADD"},{"access":["source"],"event":242,"frame":3,"instruction":["ADD",127,733,"-2",3],"op":"ADD"},{"access":["source"],"event":271,"frame":3,"instruction":["ADD",132,733,"-2",3],"op":"ADD"},{"access":["source"],"event":286,"frame":3,"instruction":["ADD",136,733,"2",3],"op":"ADD"},{"access":["source"],"event":322,"frame":3,"instruction":["ADD",140,733,"2",3],"op":"ADD"},{"access":["source"],"event":357,"frame":3,"instruction":["ADD",144,733,"2",3],"op":"ADD"},{"access":["source"],"event":370,"frame":3,"instruction":["ADD",147,733,"2",3],"op":"ADD"},{"access":["source"],"event":402,"frame":3,"instruction":["ADD",153,733,"-2",3],"op":"ADD"},{"access":["source"],"event":441,"frame":3,"instruction":["ADD",157,733,"-2",3],"op":"ADD"},{"access":["source"],"event":444,"frame":3,"instruction":["ADD",158,733,"-2",3],"op":"ADD"},{"access":["source"],"event":457,"frame":3,"instruction":["ADD",160,733,"-2",3],"op":"ADD"},{"access":["source"],"event":489,"frame":3,"instruction":["ADD",165,733,"2",3],"op":"ADD"},{"access":["source"],"event":537,"frame":3,"instruction":["ADD",170,733,"-2",3],"op":"ADD"},{"access":["source"],"event":640,"frame":3,"instruction":["ADD",183,733,"-2",3],"op":"ADD"},{"access":["source"],"event":666,"frame":3,"instruction":["ADD",187,733,"2",3],"op":"ADD"},{"access":["source"],"event":723,"frame":3,"instruction":["ADD",194,733,"-2",3],"op":"ADD"},{"access":["source"],"event":750,"frame":3,"instruction":["ADD",197,733,"2",3],"op":"ADD"},{"access":["source"],"event":792,"frame":3,"instruction":["ADD",202,733,"2",3],"op":"ADD"},{"access":["source"],"event":857,"frame":3,"instruction":["ADD",210,733,"-2",3],"op":"ADD"},{"access":["source"],"event":913,"frame":3,"instruction":["ADD",218,733,"2",3],"op":"ADD"},{"access":["source"],"event":928,"frame":3,"instruction":["ADD",219,733,"-2",3],"op":"ADD"},{"access":["source"],"event":13119,"frame":3,"instruction":["ADD",695,733,"-1",3],"op":"ADD"},{"access":["destination"],"event":13552,"frame":597,"instruction":["ADD",733,746,"1",597],"op":"ADD"},{"access":["source"],"event":13554,"frame":597,"instruction":["ADD",695,733,"1",597],"op":"ADD"},{"access":["source"],"event":14189,"frame":597,"instruction":["ADD",586,733,"-4",597],"op":"ADD"},{"access":["source"],"event":14397,"frame":597,"instruction":["ADD",132,733,"2",597],"op":"ADD"},{"access":["source"],"event":14812,"frame":597,"instruction":["ADD",585,733,"-4",597],"op":"ADD"},{"access":["source"],"event":14885,"frame":794,"instruction":["ADD",140,733,"2",794],"op":"ADD"},{"access":["source"],"event":15467,"frame":911,"instruction":["ADD",144,733,"2",911],"op":"ADD"},{"access":["source"],"event":17246,"frame":127,"instruction":["ADD",585,733,"4",127],"op":"ADD"},{"access":["source"],"event":17247,"frame":127,"instruction":["ADD",586,733,"4",127],"op":"ADD"},{"access":["destination"],"event":17457,"frame":127,"instruction":["ADD",733,133,"1/2",127],"op":"ADD"},{"access":["source"],"event":24634,"frame":127,"instruction":["ADD",21,733,"2",127],"op":"ADD"},{"access":["source"],"event":24637,"frame":127,"instruction":["ADD",47,733,"2",127],"op":"ADD"},{"access":["source"],"event":24640,"frame":127,"instruction":["ADD",434,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24643,"frame":127,"instruction":["ADD",435,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24646,"frame":127,"instruction":["ADD",436,733,"-2",127],"op":"ADD"},{"access":["source"],"event":24649,"frame":127,"instruction":["ADD",437,733,"-2",127],"op":"ADD"}]},"source_descriptor_checks":{"owned_lifetimes":11,"owned_subsequence_sha256":"1afa800e329de0d600778f8f5de448cd3a06c391d0763b45922461d94b913a9b","peak_owned":2,"public_boundary_descriptor_sha256":"564caeb99e67d04a7194fe99e84f947329d4c01fc37226078f086ae38b0f84e2","scalar_opcode_roles_coefficients_order_sha256":"8b18004534646ec44cd7044ef07f7e90853dc2572d7c96c6c735b54478578436","scope":"Descriptor and chart/lifetime chronology checks only; no endpoint linear-map, erasure-zero or native phase replay.","unmodified_nonprogram_descriptor_sha256":"32721f16106a0ba0d0c31ee943ee835086ac1ffbda627976280827dc84ac2e11"},"source_head":"3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa","source_modules_imported":false,"source_schema":"p104-contact-rewrite/1","source_word_git_blob":"9e68b7de6bfc23bc4fe9940c718dba350ba8a893","source_word_sha256":"9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6","status":"STOP_UNSUPPORTED_FORWARD_NESTING","stop_reason":"The one fixed new direct route is not strictly forward in the exact source spaces.","unique_final_block":{"actual_program_indices":[14187,14189,14192,14194],"events":[["ADD",165,586,"1/2",3],["ADD",586,733,"-4",597],["ADD",21,586,"1",652],["ADD",165,21,"-1/2",652]],"old_indices_transferred":false,"skeleton_index":12752,"skeleton_keeps_owned_MOVEs":true},"unsupported_edges":{"733":[{"new":597,"old":652,"rank":-1,"strict_forward":false}]}} diff --git a/research/p104-chart-contact-obstruction/evidence/STATIC-REVIEW.json b/research/p104-chart-contact-obstruction/evidence/STATIC-REVIEW.json new file mode 100644 index 0000000000..cd89af5ec9 --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/STATIC-REVIEW.json @@ -0,0 +1,17 @@ +{ + "checker_sha256": "b296855175e7d2cf84bbab07696b6b5b9589ffe4e1a9060174bb6d796f065304", + "decision": "ACCEPT_EXACT_FROZEN_PACKET_FOR_ONE_ROOT_ONLY_GUARDED_PAIR", + "material_blockers": [], + "original_sha256": "35b362917f97f956fc0693e6d07afcf957b0c9a13d7c954af175d1b98e0f5323", + "pin_checks": { + "inputs_sha256": 31, + "mismatches": 0, + "published_text_git_blobs": 15, + "request_immutable_sha256": 35 + }, + "request_sha256": "9519e4bce478c7d61c60fb1bb01ea4a425f137b668c57fbab83be8d329a9b041", + "reviewer_word_decode_or_scientific_execution": false, + "sanitization": "Selected public scientific fields; not original review bytes.", + "schema": "public-static-review-extract/v1", + "scope": "One fixed historical chart edit; no changed full word, native, endpoint, ordinary or funding admission." +} diff --git a/research/p104-chart-contact-obstruction/evidence/original-check.py b/research/p104-chart-contact-obstruction/evidence/original-check.py new file mode 100644 index 0000000000..20737685e5 --- /dev/null +++ b/research/p104-chart-contact-obstruction/evidence/original-check.py @@ -0,0 +1,382 @@ +#!/usr/bin/env python3 +"""One fixed 5660 contact-chart prerequisite; root-only scientific execution. + +No source imports, constructor, changed full word, endpoint/native replay or +whole pricing engine. Exact rational/bit arithmetic; Apache-2.0. +Credit Ali Romman and retained source/controller/native/compiler contributors; +OpenAI Codex assistance. See CONTRACT.md for the deliberately limited claim. +""" +from collections import Counter +from fractions import Fraction as Q +import gzip +import hashlib +import io +import json +from pathlib import Path +import sys + +HERE=Path(__file__).resolve().parent +ROOT=HERE.parents[2] +HEAD='3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa' +WORD_SHA='9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6' +WORD_BLOB='9e68b7de6bfc23bc4fe9940c718dba350ba8a893' +LIMIT=16*1024*1024 +BLOCK=[['ADD',165,586,'1/2',3],['ADD',586,733,'-4',597], + ['ADD',21,586,'1',652],['ADD',165,21,'-1/2',652]] +POINTS=(Q(33,10000),Q(6600001,2000000000)) + + +class SourceError(ValueError):pass + + +def need(ok,message): + if not ok:raise SourceError(message) + + +def sha(raw):return hashlib.sha256(raw).hexdigest() +def blob(raw):return hashlib.sha1(b'blob '+str(len(raw)).encode()+b'\0'+raw).hexdigest() +def canonical(value):return json.dumps(value,sort_keys=True,separators=(',',':')).encode() +def shown(h):return {str(r):n for r,n in sorted(h.items()) if n} +def mass(h):return sum(r*n for r,n in h.items()) +def clean(h):return {r:n for r,n in h.items() if n} +def isint(x):return type(x) is int + + +def authenticate_word(raw,pin): + need(pin['head']==HEAD and pin['bytes']==107909 and pin['sha256']==WORD_SHA and pin['git_blob']==WORD_BLOB, + 'Exact fixed source binding') + need(len(raw)==107909 and sha(raw)==WORD_SHA and blob(raw)==WORD_BLOB,'Compressed WORD byte/Git/SHA identity before decode') + + +def integer_token(s): + need(len(s)<=11,'Bounded JSON integer token') + n=int(s);need(abs(n)<=2**31-1,'Bounded JSON integer value');return n + + +def pairs_unique(pairs): + out={} + for k,v in pairs: + need(k not in out,'Duplicate JSON descriptor key');out[k]=v + return out + + +def bad_constant(s):raise SourceError('Unexpected JSON numeric constant '+s) + + +def decode(raw,pin): + authenticate_word(raw,pin) + with gzip.GzipFile(fileobj=io.BytesIO(raw),mode='rb') as stream: + decoded=stream.read(LIMIT+1) + need(len(decoded)<=LIMIT,'Decompressed WORD exceeds hard 16 MiB abort cap') + need(stream.read(1)==b'','Decompressed WORD has excess data') + word=json.loads(decoded,object_pairs_hook=pairs_unique,parse_int=integer_token,parse_constant=bad_constant) + stack=[(word,0)];nodes=0 + while stack: + x,depth=stack.pop();nodes+=1 + need(nodes<=500000 and depth<=16,'Descriptor node/depth cap') + if isinstance(x,dict): + need(len(x)<=64 and all(isinstance(k,str) and len(k)<=128 for k in x),'Descriptor field cap') + stack.extend((v,depth+1) for v in x.values()) + elif isinstance(x,list): + need(len(x)<=26000,'Descriptor array cap');stack.extend((v,depth+1) for v in x) + elif isinstance(x,str):need(len(x)<=4096,'Descriptor string cap') + elif isinstance(x,float):need(x==x and abs(x)!=float('inf'),'Finite unused metadata number') + else:need(x is None or type(x) in (int,bool),'Unexpected descriptor value') + return word,len(decoded),sha(decoded) + + +def reduced_basis(vectors): + pivots={} + for v in vectors: + need(isint(v) and 0=n,'No public lifetime creation/erasure') + else: + frame(e[-1]);need(isinstance(e[-2],str) and len(e[-2])<=128,'Exact bounded scalar coefficient') + q=Q(e[-2]);need(q.numerator.bit_length()<=256 and q.denominator.bit_length()<=256 and + q.denominator&(q.denominator-1)==0 and q and abs(q)+1<2**16,'Bounded nonzero dyadic scalar coefficient') + if op=='SCALE':need(abs(q.numerator)&(abs(q.numerator)-1)==0,'Dyadic unit SCALE grammar') + if op in ('ADD','COPY'):need(e[1]!=e[2],'Distinct scalar operands') + if op=='COPY':need(e[1]>=n,'COPY destination is an owned slot') + touched=event_roles(e) + if op!='MOVE' or e[1]>=n:skeleton.append((i,e)) + if any(r>=n for r in touched):owned_tape.append(e) + if op!='MOVE':scalar_tape.append(e[:-1]) + if op=='INIT': + slot=e[1]-n;need(owned_current[slot] is None,'Fresh owned lifetime') + owned_current[slot]=e[2];lifetimes+=1;peak=max(peak,sum(x is not None for x in owned_current)) + elif op=='CLEAR': + slot=e[1]-n;need(owned_current[slot]==e[2],'Declared owned erasure chart');owned_current[slot]=None + elif op=='MOVE': + if e[1]>=n: + slot=e[1]-n;need(owned_current[slot]==e[2] and e[4] is True and strict(spaces[e[3]],spaces[e[2]]), + 'Existing owned MOVE chronology/orientation/reverse inclusion');owned_current[slot]=e[3] + if e[1] in current: + r=e[1];need(e[4] is False and current[r]==e[2] and strict(spaces[e[2]],spaces[e[3]]), + 'Existing affected public MOVE is direct strict forward inclusion') + moves[r].append({'event':i,'old':e[2],'new':e[3],'rank':len(spaces[e[3]])-len(spaces[e[2]])});current[r]=e[3] + else: + for r in touched: + if r>=n:need(owned_current[r-n]==e[-1],'Owned scalar contact chart/activity') + if r in current: + need(current[r]==e[-1],'Existing affected role contact matches its actual current chart') + access=[] + if e[1]==r:access.append('destination') + if op in ('ADD','COPY') and e[2]==r:access.append('source') + contacts[r].append({'event':i,'op':op,'instruction':e,'frame':e[-1],'access':access}) + need(lifetimes==11 and peak==2 and all(x is None for x in owned_current),'Complete declared owned chronology counts and final inactivity') + for r in current:need(current[r]==word['final'][r],'Affected role actual final chart') + return spaces,contacts,moves,skeleton,shown(target),{ + 'owned_lifetimes':lifetimes,'peak_owned':peak,'owned_subsequence_sha256':sha(canonical(owned_tape)), + 'scalar_opcode_roles_coefficients_order_sha256':sha(canonical(scalar_tape)), + 'public_boundary_descriptor_sha256':sha(canonical({k:word[k] for k in ('public','owned_fields','initial','final','live')})), + 'unmodified_nonprogram_descriptor_sha256':sha(canonical({k:v for k,v in word.items() if k!='program'})), + 'scope':'Descriptor and chart/lifetime chronology checks only; no endpoint linear-map, erasure-zero or native phase replay.'} + + +def unique_site(sites): + need(len(sites)==1,'Exactly one final four-gate skeleton occurrence');return sites[0] + + +def check_block(block):need(block==BLOCK,'Exact fixed four-gate scalar roles/coefficients/charts') + + +def route(initial,final,contacts,spaces): + required=[{'kind':'input','frame':initial}]+[dict(c,kind='contact') for c in contacts]+[{'kind':'final','frame':final}] + visits=[] + for item in required: + if not visits or visits[-1]!=item['frame']:visits.append(item['frame']) + edges=[];failures=[] + for a,b in zip(visits,visits[1:]): + ok=strict(spaces[a],spaces[b]);entry={'old':a,'new':b,'rank':len(spaces[b])-len(spaces[a]),'strict_forward':ok} + edges.append(entry) + if not ok:failures.append(entry) + return {'required':required,'coalesced_visits':visits,'edges':edges,'unsupported_edges':failures} + + +def histogram(edges): + need(all(e['strict_forward'] and e['rank']>0 for e in edges),'Only legal forward edges earn a paid histogram') + return dict(Counter(e['rank'] for e in edges)) + + +def sumhist(a,b): + x=Counter(a);x.update(b);return clean(dict(x)) + + +def difference(new,old): + x=Counter(new);x.subtract(old);return clean(dict(x)) + + +def charged(old_h,old_s,new_h,new_s,supplied): + expected=difference(sumhist(new_h,new_s),sumhist(old_h,old_s)) + need(expected==supplied,'Full recipient plus donor charges, with no omitted donor leg');return expected + + +def log_bounds(r): + def unit(u): + z=(u-1)/(u+1);need(0<=z<=Q(1,3),'Rational logarithm domain') + low=2*sum((z**(2*j+1)/Q(2*j+1) for j in range(32)),Q(0)) + return low,low+2*z**65/(65*(1-z*z)) + k=r.bit_length()-1;a,b=unit(Q(r,2**k));l,u=unit(Q(2));return a+k*l,b+k*u + + +def power(r,c): + if r==1:return Q(1),Q(1) + l,u=log_bounds(r) + def exponential(x): + need(0<=x<1,'Alternating exponential domain');term=s=Q(1);low=high=None + for j in range(1,13): + term*=-x/j;s+=term + if j==11:low=s + if j==12:high=s + return low,high + a,b=r*exponential(c*u)[0],r*exponential(c*l)[1];mesh=10**24 + low=Q((a*mesh).__floor__(),mesh);high=Q(-((-b*mesh).__floor__()),mesh) + need(low<=a<=b<=high,'Exact outward rational price mesh');return low,high + + +def price(delta,c): + low=high=Q(0) + for r,n in delta.items(): + need(isint(r) and 1<=r<=9 and isint(n),'Bounded exact signed paid coefficient') + a,b=power(r,c);low+=n*(a if n>=0 else b);high+=n*(b if n>=0 else a) + return {'C':str(c),'local_paid_cost_difference_interval':[str(low),str(high)], + 'full18_paid_cost_difference_interval':[str(18*low),str(18*high)]},low,high + + +def reject(action,strength): + try:action() + except (SourceError,ValueError,KeyError):return {'outcome':'rejected','strength':strength} + raise SourceError('Control unexpectedly accepted: '+strength) + + +def main(): + inputs=json.loads((HERE/'INPUTS.json').read_bytes()) + for name,digest in inputs['files'].items():need(sha((ROOT/name).read_bytes())==digest,'Frozen input SHA '+name) + pin=json.loads((ROOT/inputs['word_custody']).read_bytes());raw=(ROOT/inputs['word']).read_bytes() + authenticate_word(raw,pin) + for name,expected in inputs['git_blobs'].items(): + need(blob((ROOT/name).read_bytes())==expected,'Authenticated published text Git blob '+name) + receipt=json.loads((ROOT/inputs['source_result']).read_bytes()) + nominal=json.loads((ROOT/inputs['nomination']).read_bytes()) + need(nominal['single_object']['source_head']==HEAD and nominal['single_object']['edit_old']==BLOCK[1] and + nominal['single_object']['edit_new']==['ADD',586,733,'-4',652],'Single fixed nomination') + word,length,decoded_sha=decode(raw,pin) + spaces,contacts,moves,skeleton,helpers,boundaries=descriptor(word) + need(helpers=={str(k):v for k,v in receipt['local']['helpers'].items()} and + receipt['local']['public_inputs']==743 and receipt['local']['owned_fields']==9 and + receipt['local']['owned_lifetimes']==11 and receipt['local']['peak_owned_fields']==2, + 'Published local target/boundary/owned descriptor binding') + simple=[e for _,e in skeleton] + site=unique_site([i for i in range(len(simple)-3) if simple[i:i+4]==BLOCK]);check_block(simple[site:site+4]) + actual_indices=[skeleton[site+j][0] for j in range(4)];anchor=actual_indices[1] + old={};new={};modified={};neighbor={} + for r in (586,733): + old[r]=route(word['initial'][r],word['final'][r],contacts[r],spaces) + need(not old[r]['unsupported_edges'],'Existing affected contact chain is strictly forward') + need([(e['old'],e['new'],e['rank']) for e in old[r]['edges']]==[(e['old'],e['new'],e['rank']) for e in moves[r]], + 'Complete old required-contact route equals all actual published affected MOVEs') + hit=[i for i,c in enumerate(contacts[r]) if c['event']==anchor] + need(len(hit)==1 and contacts[r][hit[0]]['instruction']==BLOCK[1],'Both role lists bind the same literal donor/recipient event') + seq=[dict(c) for c in contacts[r]];i=hit[0] + before=seq[i-1] if i else {'kind':'input','frame':word['initial'][r]} + after=seq[i+1] if i+1=0 for n in candidate.values()) and mass(targets)-mass(candidate)==760,'Complete donor-adjusted invoice and rank mass') + result.update({'recipient_local_delta':shown(dh),'donor_local_delta':shown(ds),'complete_two_role_local_delta':shown(delta), + 'old_recipient_histogram':shown(oh),'old_donor_histogram':shown(os),'new_recipient_histogram':shown(nh),'new_donor_histogram':shown(ns), + 'candidate_paid_invoice':shown(dict(candidate)),'conditional_unchanged_targets':shown(targets), + 'candidate_paid_count':sum(candidate.values()),'candidate_target_count':sum(targets.values()), + 'target_transfer_premise':'Same public boundary/target descriptors and caller; requires later realized chart induction and native/endpoint validation.'}) + prices=[];intervals=[] + for c in POINTS: + row,lo,hi=price(delta,c);prices.append(row);intervals.append((lo,hi)) + result['two_point_paid_cost_differences']=prices + if all(hi<0 for lo,hi in intervals): + result['status']='FAVORABLE_PHYSICAL_ECONOMIC_PREREQUISITE_ONLY';result['stop_reason']='Both exact donor-adjusted paid-cost upper bounds are negative; no construction or funded result follows.' + elif any(lo>=0 for lo,hi in intervals): + result['status']='STOP_DONOR_ADJUSTED_NO_GAIN';result['stop_reason']='At least one required point has nonnegative exact paid-cost lower bound, including exact-zero cases.' + else: + result['status']='STOP_UNRESOLVED_SIGN';result['stop_reason']='The fixed rational enclosures do not certify negative cost at both points. No fallback precision/route search.' + return result + + +if __name__=='__main__': + try:output=main();code=0 + except Exception as error: + output={'schema':'one-h586-chart-retag-feasibility/v1','status':'STOP_SOURCE_OR_BINDING_FAILURE', + 'failure':type(error).__name__+': '+str(error),'new_kappa':None,'changed_full_word_emitted':False, + 'source_modules_imported':False,'fallback_search':False};code=2 + print(json.dumps(output,sort_keys=True,separators=(',',':'))) + sys.exit(code) diff --git a/research/p104-chart-contact-obstruction/source/NOMINATION.json b/research/p104-chart-contact-obstruction/source/NOMINATION.json new file mode 100644 index 0000000000..3011e7f79b --- /dev/null +++ b/research/p104-chart-contact-obstruction/source/NOMINATION.json @@ -0,0 +1,56 @@ +{ + "recursive_accounting": { + "baseline_paid": { + "1": 41070, + "16": 416, + "2": 8244, + "24": 416, + "3": 8874, + "32": 416, + "4": 1638, + "40": 416, + "48": 416, + "5": 2862, + "56": 416, + "6": 396, + "64": 416, + "7": 270, + "72": 208 + }, + "baseline_targets": { + "1": 36, + "145": 208, + "17": 416, + "2": 72, + "25": 416, + "33": 416, + "4": 1638, + "41": 416, + "49": 416, + "5": 108, + "57": 416, + "65": 416, + "7": 90, + "73": 208, + "8": 288, + "9": 7398 + } + }, + "single_object": { + "edit_new": [ + "ADD", + 586, + 733, + "-4", + 652 + ], + "edit_old": [ + "ADD", + 586, + 733, + "-4", + 597 + ], + "source_head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa" + } +} diff --git a/research/p104-chart-contact-obstruction/source/PROOF.md b/research/p104-chart-contact-obstruction/source/PROOF.md new file mode 100644 index 0000000000..5eab6148f7 --- /dev/null +++ b/research/p104-chart-contact-obstruction/source/PROOF.md @@ -0,0 +1,176 @@ +# A complete conditional contact rewrite + +The claimed value is **kappa = 0.00310676333**. The comparison is the open +PR5651 value 0.00310644469. The increase is 0.00000031864. This construction +keeps the five selected framework assumptions and the helper endpoint +contract. It does not change the selected record. + +## 1. Exact sources and composition + +The retained export is PR5627 at +`ed4dc88a09a7d201971f6603b8c2074e95dd9c32`. It contains 36 source files and +one export manifest. Authenticate the archive, its complete inventory and +each file before import. Also authenticate the retained PR5644 constructor, +witness, word and the PR5643 word. + +First apply the three fixed PR5644 helper relations. Compare the result with +the complete published word. Each relation changes the local paid profile +by `-H1-H5+H6`. All public inputs, targets and owned instructions stay fixed. + +Then apply zxv's PR5643 A2 change. Check its entire scalar-program difference +against the published PR5643 word. Locate the same two gates in the PR5644 +word. Replace them by the three published gates and rebuild the nested public +paths. The complete local paid change is `H2+H6-H3-H5`. Full replay checks the +composition; numerical headline gains are not added. PR5650 already publishes +this composition, and PR5651 checks it again. Compare with the retained +PR5650 word after rebuilding the same public MOVE order. Each changed order +only swaps consecutive MOVEs on different public fields. The scalar and +owned chronology stays fixed. No new composition result is claimed here. + +## 2. The new four-gate identity + +Let `c=165`, `h=586`, `s=733` and `x=21`. The old gates are + +```text +h <- h - 4s at frame 597 +c <- c + 2s at frame 597 +c <- c - x/2 at frame 652 +x <- x + h at frame 652 +``` + +The first two sites are separated by other operations. The witness checks +that none of the intervening operations reads or writes c, h or s. The two +late gates are consecutive in the scalar skeleton. Operations on x before +the late pair retain their order. + +Use these gates instead: + +```text +c <- c + h/2 at frame 3 +h <- h - 4s at frame 597 +x <- x + h at frame 652 +c <- c - x/2 at frame 652 +``` + +Here frame 3 is `{0}`, frame 597 has basis `[82]`, and frame 652 has basis +`[82,268]`. The new early read uses the old value of h. The new gates are +placed at the old late pair after the two early updates are removed. + +Write the values before these updates as c, h, s and x. Both programs give + +```text +c_out = c + 2s - x/2 +h_out = h - 4s +s_out = s +x_out = x + h - 4s +``` + +The verifier also compares both full 4 by 4 rational matrices. More generally, +this identity holds for coefficients alpha, beta, gamma and delta when +`beta = alpha*gamma*delta`; the early coefficient is `-gamma*delta`. +The A2 identity and compensated triangle method are prior work. The new +result is this source-bound four-gate schedule and its paid native path. + +The new schedule lets c remain in dimension zero until its dimension-two +contact. Its old two rank-one requests become one rank-two request. Every +other paid count has the same value. Thus + +```text +new local paid delta = -2 H1 + H2 +new local target delta = 0 +``` + +For every `00`. The complete caller uses the local word 18 times, +so this new component improves the signed moment by `18*(2-2^t)`. + +For this fixed dimension-zero to dimension-two path of c, the new transport +also has the minimum cost among strictly nested subdivisions. Such a path +has either one rank-two step or two rank-one steps. For `0 2^26*N^5 avoiding all fixed denominators and rank witnesses" + }, + "outer": { + "functional_checks": { + "actual_new_BIT_stock_sublinear": "348599999999253/350000000000000", + "fixed_halo_explicit_metadata_branch": "26950000000001/350000000000", + "new_BIT_row_stock_sublinear_in_active_group": "1395799999997009/1400000000000000", + "new_semantic_group_guard": "3/1400000000000" + }, + "margins": { + "boundary_algebraic_matrix": "1217851226479130106267/392000000000000000000000", + "fused_gaussian": "1217851226477390318801/392000000000000000000000", + "global_coordinate_router": "2174734333/700000000000", + "group_bit_router": "3044628066893475797001/980000000000000000000000", + "group_scans": "699999999999/700000000000", + "main_transform": "1217851226199130106267/392000000000000000000000", + "microbox_face_corrections": "26950000000001/350000000000", + "polynomial_products": "1399999999999/1400000000000", + "sparse_union_movement": "160467851226479130106267/392000000000000000000000" + }, + "parameters": { + "a": "2174734333/700000000000", + "b": "4349468667/1400000000000", + "beta": "1399999999997/1400000000000", + "bit_saving": "17/5000", + "cap_xi": "356467851226199130106267/392000000000000000000000", + "complex_uniform_saving": "1087367167/350000000000", + "d": "1/1400000000000", + "epsilon": "1399999999999/1400000000000", + "kappa": "310676333/100000000000", + "lambda_": "398757294667/400000000000", + "lambda_prime": "279130106267/280000000000", + "layout": "1/1400000000000", + "q": "869893733/280000000000", + "r0": "1/14000000000000", + "stop": "1/1400000000000", + "tested_saving": "621352667/200000000000" + }, + "strict_checks": { + "actual_bit_above_effective": "205265667/700000000000", + "actual_logarithmic_gamma_guard": "1/1400000000000", + "actual_logarithmic_group_guard": "35532148774220869893733/196000000000000000000000", + "alpha_logarithm_absorption": "1/14000000000000", + "boundary_algebraic_matrix_above_kappa": "1119130106267/392000000000000000000000", + "cap_above_band": "160467851226199130106267/392000000000000000000000", + "cap_below_cell": "35532148773520869893733/392000000000000000000000", + "cap_below_phase_cell_power": "427532148773800869893733/392000000000000000000000", + "complex_above_effective": "1/1400000000000", + "complex_below_one_over_32": "39400531333/1400000000000", + "complex_endpoint": "1/700000000000", + "epsilon_below_one": "1/1400000000000", + "epsilon_positive": "1399999999999/1400000000000", + "fine_prime_halo_umbrella": "7/2", + "fused_gaussian_above_kappa": "1117390318801/392000000000000000000000", + "gaussian_above_main": "139130106267/196000000000000000000000", + "global_coordinate_router_above_kappa": "1/350000000000", + "global_gamma_power_slack": "9/14000000000000", + "group_below_dimension": "1/700000000000", + "group_bit_router_above_kappa": "3493475797001/980000000000000000000000", + "group_gauge_power_slack": "35532148774206869893733/196000000000000000000000", + "group_key_fits_record": "1/700000000000", + "group_positive": "1399999999997/1400000000000", + "group_scans_above_kappa": "174456316417/175000000000", + "halo_covers_generic_inverse_radius": "5", + "improvement_over_user_baseline": "687896455400418148631/500000000000000000000000", + "lambda_above_internal": "1/2800000000000", + "lambda_above_sigma": "3/2800000000000", + "lambda_above_tau": "1/2800000000000", + "lambda_prime_above_lambda": "1/2800000000000", + "lambda_prime_above_leaf": "2795650531333/1960000000000000000000000", + "leaf_saving_above_effective": "1395650531333/1960000000000000000000000", + "main_transform_above_kappa": "839130106267/392000000000000000000000", + "membership_arithmetic_fits_record": "1/1400000000000", + "microbox_face_corrections_above_kappa": "53897825265671/700000000000", + "microbox_halo_volume": "110600000000003/1400000000000", + "new_complex_uniform_saving_above_b": "1/1400000000000", + "new_semantic_guard_with_C1_one": "1/1400000000000", + "polynomial_products_above_kappa": "1395650531337/1400000000000", + "positive_layout_slack": "1/1400000000000", + "q_below_effective": "1/1400000000000", + "q_below_internal": "1/1400000000000", + "q_below_leaf": "2795650531333/1960000000000000000000000", + "q_positive": "869893733/280000000000", + "short_record_fallback": "1395650531333/1400000000000", + "source_axis_superpolynomial": "1/1400000000000", + "sparse_union_movement_above_kappa": "159250000001119130106267/392000000000000000000000", + "stop_below_one": "1399999999999/1400000000000", + "stop_positive": "1/1400000000000", + "strassen_integer_power_gap": "1951441519231", + "support_router_span": "3/1400000000000", + "theta_positive_polynomial_power": "2", + "union_header_fits_record": "3/1400000000000", + "union_tag_work_per_visit_fits_record": "3/1400000000000" + } + }, + "paid": { + "1": 41070, + "16": 416, + "2": 8244, + "24": 416, + "3": 8874, + "32": 416, + "4": 1638, + "40": 416, + "48": 416, + "5": 2862, + "56": 416, + "6": 396, + "64": 416, + "7": 270, + "72": 208 + }, + "paid_calls": 66474, + "previous_open_pr5651": "310644469/100000000000", + "productive_fields": 12958, + "query_shears": 15, + "rank_mass_surplus": 760, + "raw_ceiling": { + "derivative_upper": "-185029011078999527555927185035801066152378146458179911814194949/784637716923335095479473677900958302012794430558004314112", + "interval": [ + "0", + "17/5000" + ] + }, + "raw_headroom": [ + "1487/100000000000000", + "93/6250000000000" + ], + "raw_root_interval": [ + "310676334487/100000000000000", + "38834541811/12500000000000" + ], + "relative_gain_percent": "3186400/310644469", + "strictification": { + "alpha": { + "lower": "0.999999999989956163350011203614", + "upper": "0.999999999989956163350011203615" + }, + "cutoff": 17, + "delta": { + "lower": "0.967531205382707654632396498681", + "upper": "0.967531205382707654632396498682" + }, + "floor": 18, + "gamma": { + "lower": "0.968163912338747597412952587420", + "upper": "0.968163912338747597412952587421" + }, + "normalized_paid_upper": "1048576000976562501/1048576001073741824", + "power": 1024, + "reserve": "1/1000000000000", + "tail_block": 128, + "tail_decay": "39/40", + "tail_offset": "1/5", + "tested": "621352667/200000000000" + }, + "targets": { + "1": 36, + "145": 208, + "17": 416, + "2": 72, + "25": 416, + "33": 416, + "4": 1638, + "41": 416, + "49": 416, + "5": 108, + "57": 416, + "65": 416, + "7": 90, + "73": 208, + "8": 288, + "9": 7398 + }, + "whole_idle_jobs": 3120 + }, + "composed_local": { + "endpoint_coefficients": 565504, + "helpers": { + "1": 2, + "2": 4, + "4": 91, + "5": 6, + "7": 5, + "8": 16, + "9": 411 + }, + "owned_fields": 9, + "owned_lifetimes": 11, + "paid": { + "1": 2197, + "2": 457, + "3": 493, + "4": 91, + "5": 159, + "6": 22, + "7": 15 + }, + "paid_rank_mass": 5986, + "peak_owned_fields": 2, + "public_inputs": 743, + "real_scalar_allowance": 220220 + }, + "limits": [ + "The five selected framework assumptions and helper endpoint contract remain.", + "The enormous uniform word and complete rounded multiplier are not materialized.", + "These author checks are not independent scientific acceptance or a proof-kernel theorem.", + "This is a small improvement. No global optimum or large breakthrough is established." + ], + "local": { + "endpoint_coefficients": 565504, + "helpers": { + "1": 2, + "2": 4, + "4": 91, + "5": 6, + "7": 5, + "8": 16, + "9": 411 + }, + "owned_fields": 9, + "owned_lifetimes": 11, + "paid": { + "1": 2195, + "2": 458, + "3": 493, + "4": 91, + "5": 159, + "6": 22, + "7": 15 + }, + "paid_rank_mass": 5986, + "peak_owned_fields": 2, + "public_inputs": 743, + "real_scalar_allowance": 220220 + }, + "local_helper_delta": {}, + "local_paid_delta": { + "1": -5, + "2": 2, + "3": -1, + "5": -4, + "6": 4 + }, + "native": { + "distinct_maps": 2917, + "helper_normalizers": 1070, + "helpers": { + "1": 2, + "2": 4, + "4": 91, + "5": 6, + "7": 5, + "8": 16, + "9": 411 + }, + "main_adapters": 208, + "proof": "Every signed Pauli image and exact global phase; frame induction at every positive tensor width", + "recipe_payload_sha256": "02fb0e822a0fbdf0a6dd03a7cc6a255b074f97ecd923a52acc1793c31d0133a1", + "wrong_phase_rejected": true + }, + "negative_controls": { + "extra_target_credit": "Every productive helper has a native target", + "missing_central_translation": "Rejected by the complete Laurent endpoint", + "missing_early_read": "All public and owned rows", + "missing_owned_erasure": "All public and owned exits", + "unpaid_query": "Complete field and call counts", + "wrong_compensation_sign": "Declared complete replacement", + "wrong_early_frame": "Scalar destination and coefficient", + "wrong_source_version": "Exact four-gate source anchors" + }, + "new_four_gate_paid_delta": { + "1": -2, + "2": 1 + }, + "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 + ] + }, + "pr5644_local": { + "endpoint_coefficients": 565504, + "helpers": { + "1": 2, + "2": 4, + "4": 91, + "5": 6, + "7": 5, + "8": 16, + "9": 411 + }, + "owned_fields": 9, + "owned_lifetimes": 11, + "paid": { + "1": 2197, + "2": 456, + "3": 494, + "4": 91, + "5": 160, + "6": 21, + "7": 15 + }, + "paid_rank_mass": 5986, + "peak_owned_fields": 2, + "public_inputs": 743, + "real_scalar_allowance": 220208 + }, + "released_a2_paid_delta": { + "2": 1, + "3": -1, + "5": -1, + "6": 1 + }, + "released_helper_changes": [ + { + "cancellation": [ + [ + "ADD", + 291, + 293, + "1", + 234 + ], + [ + "SCALE", + 291, + "-1/2", + 234 + ] + ], + "cut": 10627, + "events": 25446, + "frame": 234, + "helper": 291, + "paid": { + "1": 2199, + "2": 456, + "3": 494, + "4": 91, + "5": 162, + "6": 19, + "7": 15 + }, + "preparation": [ + [ + "ADD", + 291, + 39, + "1", + 3 + ], + [ + "ADD", + 291, + 293, + "-1/2", + 3 + ], + [ + "ADD", + 291, + 303, + "1", + 3 + ] + ], + "removed_scalar_events": [ + [ + "SCALE", + 291, + "-1/2", + 234 + ], + [ + "ADD", + 291, + 289, + "1/2", + 234 + ], + [ + "ADD", + 291, + 39, + "1/2", + 234 + ], + [ + "ADD", + 291, + 40, + "1/2", + 234 + ], + [ + "ADD", + 291, + 18, + "-1/2", + 234 + ], + [ + "ADD", + 291, + 55, + "-1", + 234 + ] + ], + "scalar": 220140 + }, + { + "cancellation": [ + [ + "ADD", + 321, + 22, + "-2", + 237 + ], + [ + "ADD", + 321, + 320, + "3/2", + 237 + ], + [ + "ADD", + 321, + 330, + "-2", + 237 + ] + ], + "cut": 11072, + "events": 25446, + "frame": 237, + "helper": 321, + "paid": { + "1": 2198, + "2": 456, + "3": 494, + "4": 91, + "5": 161, + "6": 20, + "7": 15 + }, + "preparation": [ + [ + "ADD", + 321, + 34, + "2", + 3 + ], + [ + "ADD", + 321, + 320, + "2", + 3 + ], + [ + "ADD", + 321, + 330, + "-2", + 3 + ] + ], + "removed_scalar_events": [ + [ + "ADD", + 321, + 320, + "1", + 237 + ], + [ + "ADD", + 321, + 23, + "-1", + 237 + ], + [ + "ADD", + 321, + 22, + "-1", + 237 + ], + [ + "ADD", + 321, + 108, + "1", + 237 + ], + [ + "ADD", + 321, + 49, + "-1", + 237 + ] + ], + "scalar": 220164 + }, + { + "cancellation": [ + [ + "ADD", + 369, + 26, + "-2", + 243 + ], + [ + "ADD", + 369, + 368, + "3/2", + 243 + ], + [ + "ADD", + 369, + 378, + "2", + 243 + ] + ], + "cut": 11718, + "events": 25448, + "frame": 243, + "helper": 369, + "paid": { + "1": 2197, + "2": 456, + "3": 494, + "4": 91, + "5": 160, + "6": 21, + "7": 15 + }, + "preparation": [ + [ + "ADD", + 369, + 3, + "2", + 3 + ], + [ + "ADD", + 369, + 372, + "2", + 3 + ], + [ + "ADD", + 369, + 378, + "2", + 3 + ], + [ + "ADD", + 369, + 382, + "2", + 3 + ], + [ + "ADD", + 369, + 383, + "-2", + 3 + ] + ], + "removed_scalar_events": [ + [ + "ADD", + 369, + 368, + "1", + 243 + ], + [ + "ADD", + 369, + 26, + "-1", + 243 + ], + [ + "ADD", + 369, + 95, + "-1", + 243 + ], + [ + "ADD", + 369, + 8, + "1", + 243 + ], + [ + "ADD", + 369, + 80, + "-1", + 243 + ] + ], + "scalar": 220208 + } + ], + "scalar_pattern_census": { + "after": [], + "before": [ + { + "first": 12754, + "previous": [ + 12513, + 12753 + ], + "roles": [ + 165, + 586, + 733 + ], + "second": 12755 + } + ] + }, + "separate_columns": { + "arithmetic": "Dense integer rows with binary denominators; reverse chronology", + "coefficients": 565504, + "columns": 752 + }, + "source_commit": "ed4dc88a09a7d201971f6603b8c2074e95dd9c32", + "source_local": { + "endpoint_coefficients": 565504, + "helpers": { + "1": 2, + "2": 4, + "4": 91, + "5": 6, + "7": 5, + "8": 16, + "9": 411 + }, + "owned_fields": 9, + "owned_lifetimes": 11, + "paid": { + "1": 2200, + "2": 456, + "3": 494, + "4": 91, + "5": 163, + "6": 18, + "7": 15 + }, + "paid_rank_mass": 5986, + "peak_owned_fields": 2, + "public_inputs": 743, + "real_scalar_allowance": 220154 + }, + "status": "PASS_P104_CONTACT_REWRITE_KAPPA_00310676333" +} diff --git a/research/p104-chart-contact-obstruction/source/SOURCES.json b/research/p104-chart-contact-obstruction/source/SOURCES.json new file mode 100644 index 0000000000..2a5c2b8015 --- /dev/null +++ b/research/p104-chart-contact-obstruction/source/SOURCES.json @@ -0,0 +1,121 @@ +{ + "schema_version": 1, + "base_commit": "df0137efd35e11b4445734bf612bdd4c7ebc330c", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "581f8d87008354eb5b869f7ed9de1317ad837ce8", + "sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "f126dd2e2dad2b669e75d1d0d0bd05c600725602", + "sha256": "f7a48bfa2659b88378282a8eee7d9fe52cdf505594124c4d1686b58510fffd72" + }, + { + "path": "research/p104-contact-rewrite/inputs/pr5627-source.tar", + "usage": "input", + "pin": "head:04a5ad4ddfa871206d435ec3c68d8301b9ceca43:research/p104-contact-rewrite/inputs/pr5627-source.tar", + "git_blob": "bc900f0a1561b17b35492a80d10ae94f790d8378", + "sha256": "86c6bb839e14d79175ff8f3ed80b51a02d5c51a04deb0eff7ccea1afbe72923b" + }, + { + "path": "research/p104-contact-rewrite/inputs/pr5644-construct.py", + "usage": "input", + "pin": "head:04a5ad4ddfa871206d435ec3c68d8301b9ceca43:research/p104-contact-rewrite/inputs/pr5644-construct.py", + "git_blob": "1d9ff07f573bdbcf0e68d26eaa11862f958b2412", + "sha256": "99ff4814b7c106973b149d1d4342c7e4608a027445bf07b19b5364658970099e" + }, + { + "path": "research/p104-contact-rewrite/inputs/pr5644-witness.json", + "usage": "input", + "pin": "head:04a5ad4ddfa871206d435ec3c68d8301b9ceca43:research/p104-contact-rewrite/inputs/pr5644-witness.json", + "git_blob": "8d4f38c5c9ac9ccbcdf47ee1c95a76e2441b7c8e", + "sha256": "0cf78fcbdb62bd4965536dd7d2f74f96761fcd95b11d750bc68ac81ceb1ec58c" + }, + { + "path": "research/p104-contact-rewrite/inputs/pr5644-word.json.gz", + "usage": "input", + "pin": "head:04a5ad4ddfa871206d435ec3c68d8301b9ceca43:research/p104-contact-rewrite/inputs/pr5644-word.json.gz", + "git_blob": "0bd3cff77581895917206a410b685ce4959e3e3e", + "sha256": "3f2563d3c98f9d1170a583ba78bf171d5eb24e21976ddb026216bc637fc8a2ad" + }, + { + "path": "research/p104-contact-rewrite/inputs/pr5643-word.json.gz", + "usage": "input", + "pin": "head:04a5ad4ddfa871206d435ec3c68d8301b9ceca43:research/p104-contact-rewrite/inputs/pr5643-word.json.gz", + "git_blob": "7cf851189d95a471f7e50a7c9b0a60b8958734c9", + "sha256": "b2ab778bdd5d68c62df0b51c12dc33fde93ad89213639a8e7da23e4b9cf6c3dc" + }, + { + "sha256": "e94809cecf9e9cba56dd7a8a11ff1edeedc4c34013ff6caebdaf3b021351cf8c", + "git_blob": "92e858d5dbf43fabee80a2812f92aa55ff7db3cd", + "path": "research/p104-contact-rewrite/inputs/pr5650-word.json.gz", + "usage": "input", + "pin": "head:04a5ad4ddfa871206d435ec3c68d8301b9ceca43:research/p104-contact-rewrite/inputs/pr5650-word.json.gz" + } + ], + "source_export": { + "commit": "ed4dc88a09a7d201971f6603b8c2074e95dd9c32", + "files": 36, + "git_blob": "bc900f0a1561b17b35492a80d10ae94f790d8378", + "local_path": "inputs/pr5627-source.tar", + "package": "research/p104-helper-subspace-splits", + "sha256": "86c6bb839e14d79175ff8f3ed80b51a02d5c51a04deb0eff7ccea1afbe72923b", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/5627" + }, + "predecessors": { + "PR5627": "ed4dc88a09a7d201971f6603b8c2074e95dd9c32", + "PR5643": "a3ff5c628bfc8825553d62d913f3e91f75d6825f", + "PR5644": "c5871955d89bf73506fd68b0a5bf1cf2b3153c02", + "PR5650": "7916490124ac946704339a6a332bb76f06e5db5c", + "PR5651": "853192167b27d44aea0d4bc2b0d52d695fadc7c6" + }, + "input_commit": "04a5ad4ddfa871206d435ec3c68d8301b9ceca43", + "external_inputs": [ + { + "commit": "c5871955d89bf73506fd68b0a5bf1cf2b3153c02", + "path": "research/p104-neutral-helper-cleanup/inputs/pr5627-source.tar", + "copy": "research/p104-contact-rewrite/inputs/pr5627-source.tar", + "git_blob": "bc900f0a1561b17b35492a80d10ae94f790d8378", + "sha256": "86c6bb839e14d79175ff8f3ed80b51a02d5c51a04deb0eff7ccea1afbe72923b" + }, + { + "commit": "c5871955d89bf73506fd68b0a5bf1cf2b3153c02", + "path": "research/p104-neutral-helper-cleanup/construct.py", + "copy": "research/p104-contact-rewrite/inputs/pr5644-construct.py", + "git_blob": "1d9ff07f573bdbcf0e68d26eaa11862f958b2412", + "sha256": "99ff4814b7c106973b149d1d4342c7e4608a027445bf07b19b5364658970099e" + }, + { + "commit": "c5871955d89bf73506fd68b0a5bf1cf2b3153c02", + "path": "research/p104-neutral-helper-cleanup/WITNESS.json", + "copy": "research/p104-contact-rewrite/inputs/pr5644-witness.json", + "git_blob": "8d4f38c5c9ac9ccbcdf47ee1c95a76e2441b7c8e", + "sha256": "0cf78fcbdb62bd4965536dd7d2f74f96761fcd95b11d750bc68ac81ceb1ec58c" + }, + { + "commit": "c5871955d89bf73506fd68b0a5bf1cf2b3153c02", + "path": "research/p104-neutral-helper-cleanup/WORD.json.gz", + "copy": "research/p104-contact-rewrite/inputs/pr5644-word.json.gz", + "git_blob": "0bd3cff77581895917206a410b685ce4959e3e3e", + "sha256": "3f2563d3c98f9d1170a583ba78bf171d5eb24e21976ddb026216bc637fc8a2ad" + }, + { + "commit": "a3ff5c628bfc8825553d62d913f3e91f75d6825f", + "path": "research/p104-a2-paid-rank-exchange/WORD.json.gz", + "copy": "research/p104-contact-rewrite/inputs/pr5643-word.json.gz", + "git_blob": "7cf851189d95a471f7e50a7c9b0a60b8958734c9", + "sha256": "b2ab778bdd5d68c62df0b51c12dc33fde93ad89213639a8e7da23e4b9cf6c3dc" + }, + { + "commit": "7916490124ac946704339a6a332bb76f06e5db5c", + "path": "research/p104-a2-neutral-cleanup/WORD.json.gz", + "copy": "research/p104-contact-rewrite/inputs/pr5650-word.json.gz", + "sha256": "e94809cecf9e9cba56dd7a8a11ff1edeedc4c34013ff6caebdaf3b021351cf8c", + "git_blob": "92e858d5dbf43fabee80a2812f92aa55ff7db3cd" + } + ] +} diff --git a/research/p104-chart-contact-obstruction/source/WITNESS.json b/research/p104-chart-contact-obstruction/source/WITNESS.json new file mode 100644 index 0000000000..4671283b4f --- /dev/null +++ b/research/p104-chart-contact-obstruction/source/WITNESS.json @@ -0,0 +1,16 @@ +{ + "indices": [12513, 12753, 12754, 12755], + "roles": [165, 586, 733, 21], + "old": [ + ["ADD", 586, 733, "-4", 597], + ["ADD", 165, 733, "2", 597], + ["ADD", 165, 21, "-1/2", 652], + ["ADD", 21, 586, "1", 652] + ], + "replacement": [ + ["ADD", 165, 586, "1/2", 3], + ["ADD", 586, 733, "-4", 597], + ["ADD", 21, 586, "1", 652], + ["ADD", 165, 21, "-1/2", 652] + ] +} diff --git a/research/p104-chart-contact-obstruction/source/WORD-CUSTODY.json b/research/p104-chart-contact-obstruction/source/WORD-CUSTODY.json new file mode 100644 index 0000000000..01ad2e5ef3 --- /dev/null +++ b/research/p104-chart-contact-obstruction/source/WORD-CUSTODY.json @@ -0,0 +1,6 @@ +{ + "bytes": 107909, + "git_blob": "9e68b7de6bfc23bc4fe9940c718dba350ba8a893", + "head": "3b0b4f37d5005f381ed9cfcccebfbe1ab35c71aa", + "sha256": "9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6" +} diff --git a/research/p104-chart-contact-obstruction/source/WORD.json.gz b/research/p104-chart-contact-obstruction/source/WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..9e68b7de6bfc23bc4fe9940c718dba350ba8a893 GIT binary patch literal 107909 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 Fin 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%0AmZ8Q&&WR&vhqW6)@D~4W+ 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 word['public']] + + +def rebuild(word, program, L): + """Keep the owned paths and rebuild each nested public path.""" + out = deepcopy(word) + n = word['public'] + current = word['initial'] + [None]*word['owned_fields'] + spaces = [L.span(b) for b in word['frames']] + events = [] + + def move(role, frame): + old = current[role] + if old == frame: + return + L.need(role < n and spaces[old] < spaces[frame], 'Strict nested public path') + events.append(['MOVE', role, old, frame, False]) + current[role] = frame + + for event in program: + op, role = event[:2] + if op == 'MOVE': + L.need(role >= n and current[role] == event[2], 'Unchanged owned transport') + current[role] = event[3] + elif op == 'INIT': + L.need(current[role] is None, 'Fresh owned lifetime') + current[role] = event[2] + elif op == 'CLEAR': + L.need(current[role] == event[2], 'Owned erasure frame') + current[role] = None + else: + for operand in sorted(roles(event)): + move(operand, event[-1]) + events.append(event[:]) + for role, frame in enumerate(word['final']): + move(role, frame) + out['program'] = events + return out + + +def replace_a2(program, L): + old = [['ADD', 388, 715, '-4', 825], ['ADD', 340, 388, '1', 825]] + sites = [i for i in range(len(program)-1) if program[i:i+2] == old] + L.need(len(sites) == 1, 'Unique published A2 pair') + i = sites[0] + return program[:i] + [['ADD', 340, 715, '-4', 396], old[1], + ['ADD', 388, 715, '-4', 127]] + program[i+2:] + + +def check_a2_source(source, published, L): + for key in source: + if key not in ('program', 'schema'): + L.need(source[key] == published[key], 'Published A2 boundary: '+key) + L.need(replace_a2(scalar_word(source), L) == scalar_word(published), + 'Exact released PR5643 scalar change') + before, after = L.replay(source), L.replay(published) + delta = Counter(after['paid']) + delta.subtract(before['paid']) + L.need({r:v for r,v in delta.items() if v} == {2:1,3:-1,5:-1,6:1}, + 'Exact released PR5643 paid change') + + +def matrix(gates, labels): + at = {r:i for i,r in enumerate(labels)} + rows = [[Q(i == j) for j in range(len(labels))] for i in range(len(labels))] + for event in gates: + a, b, q = at[event[1]], at[event[2]], Q(event[3]) + rows[a] = [x+q*y for x,y in zip(rows[a], rows[b])] + return rows + + +def rewrite(word, witness, L): + """Use the old helper value before its source update.""" + p = skeleton(word) + indices = witness['indices'] + old, new = witness['old'], witness['replacement'] + L.need(indices == sorted(set(indices)) and len(indices) == 4, 'Four ordered source sites') + L.need([p[i] for i in indices] == old, 'Exact four-gate source anchors') + c, h, s, x = witness['roles'] + L.need(len({c,h,s,x}) == 4 and max(c,h,s,x) < word['public'], 'Four public roles') + L.need([e[1:3] for e in old] == [[h,s],[c,s],[c,x],[x,h]], 'Declared source pattern') + alpha, beta, gamma, delta = (Q(e[3]) for e in old) + L.need(beta == alpha*gamma*delta, 'Exact compensation coefficient') + expected = [['ADD', c, h, str(-gamma*delta), 3], + ['ADD', h, s, str(alpha), 597], + ['ADD', x, h, str(delta), 652], + ['ADD', c, x, str(gamma), 652]] + L.need(new == expected, 'Declared complete replacement') + L.need([word['frames'][f] for f in (3,597,652)] == [[],[82],[82,268]], + 'Exact zero, one and two dimensional charts') + omitted = set(indices) + L.need(not any(roles(e) & {c,h,s} for i,e in enumerate(p) + if indices[0] < i < indices[-1] and i not in omitted), + 'No intervening read or write of the three moved roles') + L.need(indices[-1] == indices[-2]+1, 'The two late gates are consecutive') + L.need(matrix(old, [c,h,s,x]) == matrix(new, [c,h,s,x]), 'Independent four-column identity') + changed = [] + for i,event in enumerate(p): + if i == indices[-1]: + changed.extend(new) + elif i not in omitted: + changed.append(event) + result = rebuild(word, changed, L) + result['schema'] = 'p104-contact-rewrite/1' + before, after = L.replay(word), L.replay(result) + delta_paid = Counter(after['paid']) + delta_paid.subtract(before['paid']) + L.need({r:v for r,v in delta_paid.items() if v} == {1:-2,2:1}, 'Two H1 calls become one H2') + L.need(before['helpers'] == after['helpers'], 'Every independent target is retained') + return result, after diff --git a/research/p104-chart-contact-obstruction/source/local-grammar.py b/research/p104-chart-contact-obstruction/source/local-grammar.py new file mode 100644 index 0000000000..e72cb02dba --- /dev/null +++ b/research/p104-chart-contact-obstruction/source/local-grammar.py @@ -0,0 +1,208 @@ +"""Check the complete P104 word with an independent helper inventory. + +Adapted from Ali Romman's PR5544/5545. David Arias supplied the word; +Cinna Davis supplied private reuse; Gareth Davidson supplied composition. +Prepared by Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +""" +from collections import Counter +from fractions import Fraction as Q +from functools import lru_cache +from hashlib import sha256 +from pathlib import Path +import gzip +import importlib.util +import json +import sys + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] + +def need(ok, why): + if not ok: + raise ValueError(why) + +def read(path): + raw = path.read_bytes() + return json.loads(gzip.decompress(raw) if path.suffix == '.gz' else raw) + +def load(path, name): + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + +def add(dst, src, q): + for k, v in tuple(src.items()): + value = dst.get(k, 0) + q*v + if value: + dst[k] = value + else: + dst.pop(k, None) + +def span(basis): + out = {0} + for v in basis: + need(type(v) is int and 0 < v < 512 and v not in out, 'Independent binary basis') + out |= {x ^ v for x in tuple(out)} + return frozenset(out) + +def replay(w): + public = w['public'] + owned = w.get('owned_fields', 8) + need(type(owned) is int and 8 <= owned <= 9, 'Owned inventory bound') + need(type(public) is int and 735 <= public <= 750, 'Public inventory bound') + need(len(w['initial']) == len(w['final']) == public, 'Public boundary size') + need(len(w['program']) < 26000, 'Fixed operation bound') + frames = [span(x) for x in w['frames']] + rows = [{r:Q(1)} for r in range(public+owned)] + current = list(w['initial']) + [None]*owned + paid, scalar, live_owned, peak = Counter(), 0, set(), 0 + lifetimes = 0 + for e in w['program']: + op, r = e[:2] + need(0 <= r < public+owned, 'Role index') + if op == 'MOVE': + _, r, a, b, private = e + need(current[r] == a and (r in live_owned) == private, 'Transport source and ownership') + need(frames[b] < frames[a] if private else frames[a] < frames[b], 'Nested chronological transport') + paid[abs(len(w['frames'][b])-len(w['frames'][a]))] += 1 + current[r] = b + elif op == 'INIT': + need(r >= public and r not in live_owned, 'Owned initialization') + live_owned.add(r) + lifetimes += 1 + 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 < public+owned 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 0 < peak <= 2 and current[:public] == w['final'], 'All public and owned exits') + live = set(w['live']) + for r,row in enumerate(rows): + expected = {r:Q(1)} if r < public else {} + if r-112 in live: + expected[r-112] = Q(1) + need(row == expected, 'All 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(public) 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':public, 'owned_fields':owned, 'owned_lifetimes':lifetimes, + 'peak_owned_fields':peak, 'real_scalar_allowance':scalar, 'endpoint_coefficients':(public+owned)*(public+owned), + 'paid_rank_mass':sum(r*count for r,count in paid.items())} + +def reverse_columns(w): + """Check the transpose with dense dyadic rows and the reverse chronology.""" + public = w['public'] + n = public+w.get('owned_fields', 8) + 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 < public: + 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): + n = w['public'] + 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(n): + 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-chart-contact-obstruction/source/patterns.py b/research/p104-chart-contact-obstruction/source/patterns.py new file mode 100644 index 0000000000..75ca00f9e1 --- /dev/null +++ b/research/p104-chart-contact-obstruction/source/patterns.py @@ -0,0 +1,74 @@ +"""Count the tested four-gate scalar pattern before frame selection. + +Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +This is a finite pattern census, not a test of all possible rewrites. +""" +from bisect import bisect_left, bisect_right +from collections import defaultdict +from fractions import Fraction as Q + + +def find(word): + public = word['public'] + program = [e for e in word['program'] if e[0] != 'MOVE' or e[1] >= public] + touches, reads, writes = (defaultdict(list) for _ in range(3)) + for i, event in enumerate(program): + if event[0] not in ('ADD', 'COPY', 'SCALE'): + continue + roles = {event[1],event[2]} if event[0] != 'SCALE' else {event[1]} + for role in roles: + touches[role].append(i) + writes[event[1]].append(i) + reads[event[2] if event[0] != 'SCALE' else event[1]].append(i) + + def next_site(sites, i): + k = bisect_right(sites, i) + return sites[k] if k < len(sites) else len(program) + + def previous(roles, j, skip): + candidates = [] + for role in roles: + sites = touches[role] + k = bisect_left(sites, j)-1 + while k >= 0 and sites[k] in skip: + k -= 1 + if k >= 0: + candidates.append(sites[k]) + return max(candidates, default=-1) + + matches = [] + for i, first in enumerate(program): + if first[0] != 'ADD' or max(first[1:3]) >= public: + continue + a, b = first[1:3] + j = min(next_site(writes[b], i), next_site(reads[a], i)) + if j >= len(program): + continue + second = program[j] + if second[0] != 'ADD' or max(second[1:3]) >= public: + continue + x, y = second[1:3] + if len({a,b,x,y}) != 3: + continue + if y == a: + c, h, eta = x, b, Q(first[-2])*Q(second[-2]) + elif x == b: + c, h, eta = a, y, -Q(first[-2])*Q(second[-2]) + else: + continue + t = previous({c,h}, j, {i}) + if (t < 0 or program[t][0] != 'ADD' or program[t][1] not in (c,h) + or program[t][2] in (c,h)): + continue + s = program[t][2] + if s >= public or previous({c,h,s}, j, {i}) != t: + continue + u = previous({c,h,s}, t, {i}) + if (u < 0 or program[u][0] != 'ADD' or program[u][2] != s + or {program[u][1],program[t][1]} != {c,h}): + continue + alpha = Q(program[u][-2] if program[u][1] == h else program[t][-2]) + beta = Q(program[u][-2] if program[u][1] == c else program[t][-2]) + if beta + eta*alpha == 0: + matches.append(dict(first=i, second=j, previous=[u,t], roles=[c,h,s])) + return matches diff --git a/research/p104-chart-contact-obstruction/source/verify.py b/research/p104-chart-contact-obstruction/source/verify.py new file mode 100644 index 0000000000..93ba8c1769 --- /dev/null +++ b/research/p104-chart-contact-obstruction/source/verify.py @@ -0,0 +1,143 @@ +"""Check the complete conditional P104 contact rewrite and its price. + +Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +""" +import argparse +from collections import Counter +from copy import deepcopy +import gzip +import json +from pathlib import Path +import sys +import tempfile + +sys.dont_write_bytecode = True +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE)) +from sources import sources, load, need +import construct +import patterns + + +def rejected(action): + try: + action() + except ValueError as error: + return str(error) + raise ValueError('An invalid certificate was accepted') + + +def difference(after, before): + delta = Counter(after) + delta.subtract(before) + return {r:v for r,v in delta.items() if v} + + +def run(): + witness = json.loads((HERE/'WITNESS.json').read_bytes()) + with sources() as (parent, root): + L = load(parent/'local.py', 'local') + source = L.read(parent/'WORD.json.gz') + old = L.replay(source) + cleanup = load(HERE/'inputs/pr5644-construct.py', 'released_helper_cleanup') + clean, clean_changes, clean_local = cleanup.construct( + source, L.read(HERE/'inputs/pr5644-witness.json'), L) + need(clean == L.read(HERE/'inputs/pr5644-word.json.gz'), 'Exact released PR5644 word') + construct.check_a2_source(source, L.read(HERE/'inputs/pr5643-word.json.gz'), L) + composed = construct.rebuild(clean, construct.replace_a2(construct.skeleton(clean), L), L) + published = L.read(HERE/'inputs/pr5650-word.json.gz') + normalized = construct.rebuild(published, construct.skeleton(published), L) + normalized['schema'] = composed['schema'] + need(normalized == composed, 'Exact released PR5650 composition after public MOVE ordering') + composed_local = L.replay(composed) + need(L.replay(published) == composed_local, 'Same complete published composition receipt') + need(difference(composed_local['paid'], clean_local['paid']) == {2:1,3:-1,5:-1,6:1}, + 'The released A2 change composes with all three helper relations') + word, local = construct.rewrite(composed, witness, L) + pattern_before, pattern_after = patterns.find(composed), patterns.find(word) + need(pattern_before == [dict(first=12754,second=12755,previous=[12513,12753],roles=[165,586,733])] + and pattern_after == [], 'One tested scalar pattern before the change and none after') + columns = L.reverse_columns(word) + need(cleanup.owned_events(word) == cleanup.owned_events(source), 'All owned instructions stay fixed') + need((local['public_inputs'],local['owned_fields'],local['owned_lifetimes'],local['peak_owned_fields']) == + (743,9,11,2), 'Complete public and owned inventories') + need(difference(local['paid'],old['paid']) == {1:-5,2:2,3:-1,5:-4,6:4}, 'Combined exact paid delta') + need(local['helpers'] == old['helpers'] == composed_local['helpers'], 'No target debit or added credit') + print('PASS released composition, four-gate identity and all 565504 endpoint coefficients', flush=True) + native = L.native(word) + C = load(root/'research/p104-productive-controller/caller.py', 'contact_caller') + caller = C.construct() + need(caller == L.read(root/'research/p104-productive-controller/CONTROLLER.json'), 'Same complete controller') + physical = C.physical(caller, word) + print('PASS all native phases, target maps and physical caller contacts', flush=True) + price = (parent/'pricing.py').read_text() + for before, after in json.loads((HERE/'PRICING-EDITS.json').read_bytes()): + need(price.count(before) == 1, 'One declared price change') + price = price.replace(before, after) + need((HERE/'pricing.py').read_text() == price, 'Only declared price and attribution changes') + P = load(HERE/'pricing.py', 'contact_price') + costs = P.run(local, native, caller, physical) + controls = C.controls(caller) + bad = deepcopy(witness) + bad['replacement'][0][3] = '-1/2' + controls['wrong_compensation_sign'] = rejected(lambda: construct.rewrite(composed,bad,L)) + bad = deepcopy(witness) + bad['indices'][0] += 1 + controls['wrong_source_version'] = rejected(lambda: construct.rewrite(composed,bad,L)) + bad = deepcopy(word) + bad['program'].remove(next(e for e in bad['program'] if e == witness['replacement'][0])) + controls['missing_early_read'] = rejected(lambda: L.replay(bad)) + bad = deepcopy(word) + site = next(i for i,e in enumerate(bad['program']) if e == witness['replacement'][0]) + bad['program'][site][-1] = 597 + controls['wrong_early_frame'] = rejected(lambda: L.replay(bad)) + bad = deepcopy(word) + bad['program'].pop(max(i for i,e in enumerate(bad['program']) if e[0] == 'CLEAR')) + controls['missing_owned_erasure'] = rejected(lambda: L.replay(bad)) + bad = deepcopy(local) + bad['helpers'][1] += 1 + controls['extra_target_credit'] = rejected(lambda: P.assemble(bad,native,caller,physical)) + bad = deepcopy(local) + bad['paid'][1] -= 1 + controls['unpaid_query'] = rejected(lambda: P.assemble(bad,native,caller,physical)) + result = dict(status='PASS_P104_CONTACT_REWRITE_KAPPA_00310676333', + authenticated_package_inputs=6, authenticated_source_files=36, + source_commit='ed4dc88a09a7d201971f6603b8c2074e95dd9c32', + released_helper_changes=clean_changes, + released_a2_paid_delta={2:1,3:-1,5:-1,6:1}, + scalar_pattern_census=dict(before=pattern_before,after=pattern_after), + new_four_gate_paid_delta={1:-2,2:1}, + local_paid_delta={1:-5,2:2,3:-1,5:-4,6:4},local_helper_delta={}, + source_local=old,pr5644_local=clean_local,composed_local=composed_local, + local=local,separate_columns=columns,native=native,physical_caller=physical, + complete_cost=costs,negative_controls=controls, + limits=['The five selected framework assumptions and helper endpoint contract remain.', + 'The enormous uniform word and complete rounded multiplier are not materialized.', + 'These author checks are not independent scientific acceptance or a proof-kernel theorem.', + 'This is a small improvement. No global optimum or large breakthrough is established.']) + return P.encode(result), word + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--write', action='store_true') + args = parser.parse_args() + with tempfile.TemporaryDirectory(prefix='p104-contact-bytecode-') as cache: + sys.pycache_prefix = cache + result, word = run() + for name, value in (('RESULT.json',result),('WORD.json.gz',word)): + path = HERE/name + if args.write: + raw = (json.dumps(value,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) == value, + 'Exact saved artifact: '+name) + print(result['status']) + print(json.dumps({k:result['complete_cost'][k] for k in + ('kappa_decimal','gain','raw_root_interval','productive_fields','paid_calls')},sort_keys=True)) + + +if __name__ == '__main__': + main() diff --git a/research/p104-chart-contact-obstruction/verify.py b/research/p104-chart-contact-obstruction/verify.py new file mode 100644 index 0000000000..26e39025b7 --- /dev/null +++ b/research/p104-chart-contact-obstruction/verify.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 +"""Reproduce one historical direct-route obstruction. Apache-2.0.""" +import hashlib +import json +import os +from pathlib import Path, PurePosixPath +import subprocess +import sys +import tempfile + +HERE=Path(__file__).resolve().parent +EXPECTED='41a58dbab3a8aa8215d76c01c3b557e425604ec5aab6e15782c3f0eb88ca63a4' +ORIGINAL_CORE='b296855175e7d2cf84bbab07696b6b5b9589ffe4e1a9060174bb6d796f065304' +WORD_SHA='9e78864cd46fc443c6183674588c99c52cfb8e8e408c7ba09bb50cf4694463f6' +WORD_BLOB='9e68b7de6bfc23bc4fe9940c718dba350ba8a893' + +def need(ok,message): + if not ok:raise ValueError(message) +def sha(raw):return hashlib.sha256(raw).hexdigest() +def safe(name): + p=PurePosixPath(name) + need(not p.is_absolute() and '..' not in p.parts and p.as_posix()==name,'Canonical package-local payload path') + f=HERE + for bit in p.parts: + f=f/bit;need(not f.is_symlink(),'No payload symlinks') + need(f.is_file(),'Missing payload '+name);return f + +def check_bytes(raw,row): + need(len(raw)==row['bytes'] and sha(raw)==row['sha256'],'Payload size/SHA256') + if 'git_blob' in row: + need(hashlib.sha1(b'blob '+str(len(raw)).encode()+b'\0'+raw).hexdigest()==row['git_blob'],'Payload Git blob') + +def rejected(action): + try:action() + except ValueError:return 'rejected' + raise ValueError('Integrity control accepted a mutation') + +def main(): + manifest=json.loads((HERE/'PORTABLE.json').read_bytes()) + need(manifest['original_result_sha256']==EXPECTED and manifest['original_checker_sha256']==ORIGINAL_CORE,'Original evidence binding') + for name,row in manifest['payloads'].items():check_bytes(safe(name).read_bytes(),row) + original=safe('evidence/original-check.py').read_bytes();portable=safe('check.py').read_bytes() + need(sha(original)==ORIGINAL_CORE and original.count(b'ROOT=HERE.parents[2]')==1 and + original.replace(b'ROOT=HERE.parents[2]',b'ROOT=HERE')==portable,'Exactly one ROOT adaptation; unchanged scientific logic') + need(sha(safe('evidence/RESULT-normal.json').read_bytes())==EXPECTED and + safe('evidence/RESULT-normal.json').read_bytes()==safe('evidence/RESULT-optimized.json').read_bytes(),'Entire original result pair') + word=safe('source/WORD.json.gz').read_bytes();row=manifest['payloads']['source/WORD.json.gz'] + need(row['bytes']==107909 and row['sha256']==WORD_SHA and row['git_blob']==WORD_BLOB,'Exact historical compressed source') + controls={ + 'corrupt_compressed_bytes':rejected(lambda:check_bytes(word[:-1]+bytes([word[-1]^1]),row)), + 'corrupt_scientific_core':rejected(lambda:check_bytes(portable+b'\n',manifest['payloads']['check.py']))} + # Fresh cache isolates imports in the single separately launched core. + # The package and export remain read-only; the cache lives outside them. + with tempfile.TemporaryDirectory(prefix='p104-chart-cache-') as cache: + command=[sys.executable,'-I','-B','-X','pycache_prefix='+cache] + if sys.flags.optimize:command.append('-O' if sys.flags.optimize==1 else '-OO') + command.append(str(HERE/'check.py')) + env=dict(os.environ);env.pop('PYTHONOPTIMIZE',None) + done=subprocess.run(command,cwd=HERE,env=env,capture_output=True,timeout=55,check=False) + need(done.returncode==0 and not done.stderr,'Core must complete without source/binding/resource errors') + need(sha(done.stdout)==EXPECTED,'Entire scientific output must equal original SHA256; no excluded fields') + value=json.loads(done.stdout) + need(value['status']=='STOP_UNSUPPORTED_FORWARD_NESTING' and value['candidate_paid_invoice'] is None,'Completed physical stop; no priced candidate') + need(value['instruction_count']==25448 and value['decompressed_hard_cap']==16777216,'Exact corpus count and unchanged abort cap') + need(value['unique_final_block']['actual_program_indices']==[14187,14189,14192,14194],'Final four-gate binding') + donor=value['donor_W_Z'] + need(donor['W']['event']==13554 and donor['W']['instruction']==['ADD',695,733,'1',597] and + donor['Z']['event']==14397 and donor['Z']['instruction']==['ADD',132,733,'2',597] and + donor['p']==donor['r']==1,'Exact neighboring donor reads') + need(donor['spaces']=={'597':[82],'652':[82,268]},'Fixed ordered source spaces') + need(any(e['old']==652 and e['new']==597 and e['rank']==-1 and e['strict_forward'] is False + for e in value['unsupported_edges']['733']),'Forbidden 652-to-597 return') + need(len(value['controls'])==7 and all(v['outcome']=='rejected' for v in value['controls'].values()),'Original seven controls reject') + print(json.dumps({'status':'PASS_P104_FIXED_CHART_CONTACT_OBSTRUCTION','source_head':value['source_head'], + 'scientific_status':value['status'],'complete_scientific_output_sha256':sha(done.stdout), + 'required_donor_route':[597,652,597],'new_kappa':None,'candidate_paid_invoice':None, + 'core_executions':1,'original_controls_rejected':7,'portable_integrity_controls':controls, + 'core_adaptation':'One ROOT assignment only; source modules never imported.'},sort_keys=True,separators=(',',':'))) + +if __name__=='__main__': + try:main() + except Exception as error: + print(json.dumps({'status':'FAIL_P104_CHART_OBSTRUCTION_REPLAY','failure':type(error).__name__+': '+str(error)},sort_keys=True,separators=(',',':'))) + sys.exit(1)