From c861a61650c1ea891b2ed6eb5a6f2161c58c7d33 Mon Sep 17 00:00:00 2001 From: SHIN09-git Date: Wed, 4 Nov 2026 11:43:27 +0800 Subject: [PATCH 1/4] Retain the exact four-port signature handoff and its source census --- research/two-block-signatures/.gitattributes | 2 + .../source/3997-TERNARY-SCREEN.txt | 440 ++++++++++++++++++ .../two-block-signatures/source/6691-PROOF.md | 115 +++++ .../source/6691-README.md | 144 ++++++ .../source/6691-RESULT.json | 69 +++ research/two-block-signatures/source/LICENSE | 201 ++++++++ 6 files changed, 971 insertions(+) create mode 100644 research/two-block-signatures/.gitattributes create mode 100644 research/two-block-signatures/source/3997-TERNARY-SCREEN.txt create mode 100644 research/two-block-signatures/source/6691-PROOF.md create mode 100644 research/two-block-signatures/source/6691-README.md create mode 100644 research/two-block-signatures/source/6691-RESULT.json create mode 100644 research/two-block-signatures/source/LICENSE diff --git a/research/two-block-signatures/.gitattributes b/research/two-block-signatures/.gitattributes new file mode 100644 index 0000000000..20cd7d6852 --- /dev/null +++ b/research/two-block-signatures/.gitattributes @@ -0,0 +1,2 @@ +* text eol=lf +source/** -text diff --git a/research/two-block-signatures/source/3997-TERNARY-SCREEN.txt b/research/two-block-signatures/source/3997-TERNARY-SCREEN.txt new file mode 100644 index 0000000000..6b1430e3a5 --- /dev/null +++ b/research/two-block-signatures/source/3997-TERNARY-SCREEN.txt @@ -0,0 +1,440 @@ +TERNARY_SCREEN_V1 total=43046721 invertible=27947520 signatures=439 binary_invertible=22560 binary_signatures=391 +55aa 0 0 0 -1 0 0 -1 -1 0 -1 0 0 -1 -1 0 0 +57ae 0 0 0 -1 -1 0 -1 -1 0 -1 0 0 -1 -1 0 0 +57ea 0 0 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 0 0 +57ee 0 0 0 -1 -1 -1 -1 -1 0 -1 0 0 -1 -1 0 0 +5a5a 0 0 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 +5a7e 0 0 0 -1 -1 -1 0 -1 0 0 -1 0 -1 0 -1 0 +5aa5 0 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 +5abd 0 0 0 -1 -1 0 0 -1 0 0 -1 0 -1 -1 -1 0 +5adb 0 0 0 -1 0 -1 0 -1 0 0 -1 0 -1 -1 -1 0 +5ae7 0 0 0 -1 -1 -1 0 -1 0 0 -1 0 0 -1 -1 0 +5aff 0 0 0 -1 1 -1 0 -1 0 0 -1 0 -1 -1 -1 0 +5bad 0 0 0 -1 -1 0 0 -1 -1 0 -1 0 -1 -1 -1 0 +5bbd 0 0 0 -1 -1 0 0 -1 1 0 -1 0 -1 -1 -1 0 +5bda 0 0 0 -1 0 -1 0 -1 0 -1 -1 0 -1 -1 -1 0 +5bdb 0 0 0 -1 0 -1 0 -1 1 0 -1 0 -1 -1 -1 0 +5bef 0 0 0 -1 -1 -1 0 -1 -1 0 -1 0 -1 -1 -1 0 +5bfe 0 0 0 -1 -1 -1 0 -1 0 -1 -1 0 -1 -1 -1 0 +5bff 0 0 0 -1 -1 -1 0 -1 1 0 -1 0 -1 -1 -1 0 +5dab 0 0 0 -1 0 0 -1 -1 -1 0 -1 0 -1 -1 -1 0 +5dba 0 0 0 -1 0 0 -1 -1 0 -1 -1 0 -1 -1 -1 0 +5dbb 0 0 0 -1 0 0 -1 -1 1 0 -1 0 -1 -1 -1 0 +5e7a 0 0 0 -1 0 -1 -1 -1 0 0 -1 0 -1 0 -1 0 +5e7e 0 0 0 -1 -1 -1 -1 -1 0 0 -1 0 -1 0 -1 0 +5ea7 0 0 0 -1 -1 0 -1 -1 0 0 -1 0 0 -1 -1 0 +5ebf 0 0 0 -1 -1 0 -1 -1 0 0 -1 0 -1 -1 -1 0 +5ee7 0 0 0 -1 -1 -1 -1 -1 0 0 -1 0 0 -1 -1 0 +5efb 0 0 0 -1 0 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 +5eff 0 0 0 -1 1 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 +5faf 0 0 0 -1 1 0 -1 -1 -1 0 -1 0 -1 -1 -1 0 +5fbe 0 0 0 -1 -1 0 -1 -1 0 -1 -1 0 -1 -1 -1 0 +5fbf 0 0 0 -1 -1 0 -1 -1 1 0 -1 0 -1 -1 -1 0 +5feb 0 0 0 -1 0 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 +5fef 0 0 0 -1 1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 +5ffa 0 0 0 -1 0 1 -1 -1 0 -1 -1 0 -1 -1 -1 0 +5ffb 0 0 0 -1 0 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +5ffe 0 0 0 -1 -1 1 -1 -1 0 -1 -1 0 -1 -1 -1 0 +5fff 0 0 0 -1 1 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +75ae -1 0 0 -1 -1 0 -1 -1 0 -1 0 0 -1 -1 0 0 +75ea 0 -1 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 0 0 +75ee -1 -1 0 -1 -1 -1 -1 -1 0 -1 0 0 -1 -1 0 0 +77ae 1 0 0 -1 -1 0 -1 -1 0 -1 0 0 -1 -1 0 0 +77ea 0 1 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 0 0 +77ee 0 -1 0 -1 -1 -1 -1 -1 0 -1 0 0 -1 -1 0 0 +7a5e -1 0 0 -1 -1 -1 0 -1 0 0 -1 0 -1 0 -1 0 +7a7e 1 0 0 -1 -1 -1 0 -1 0 0 -1 0 -1 0 -1 0 +7adf -1 0 0 -1 -1 -1 0 -1 0 0 -1 0 -1 -1 -1 0 +7ae5 0 -1 0 -1 -1 -1 0 -1 0 0 -1 0 0 -1 -1 0 +7ae7 1 0 0 -1 -1 -1 0 -1 0 0 -1 0 0 -1 -1 0 +7afd 0 -1 0 -1 -1 -1 0 -1 0 0 -1 0 -1 -1 -1 0 +7aff 1 0 0 -1 -1 -1 0 -1 0 0 -1 0 -1 -1 -1 0 +7bde -1 0 0 -1 -1 -1 0 -1 0 -1 -1 0 -1 -1 -1 0 +7bdf -1 0 0 -1 -1 -1 0 -1 1 0 -1 0 -1 -1 -1 0 +7bed 0 -1 0 -1 -1 -1 0 -1 -1 0 -1 0 -1 -1 -1 0 +7bef 1 0 0 -1 -1 -1 0 -1 -1 0 -1 0 -1 -1 -1 0 +7bfd 0 -1 0 -1 -1 -1 0 -1 1 0 -1 0 -1 -1 -1 0 +7bfe 1 0 0 -1 -1 -1 0 -1 0 -1 -1 0 -1 -1 -1 0 +7bff 0 1 0 -1 -1 -1 0 -1 1 0 -1 0 -1 -1 -1 0 +7daf -1 0 0 -1 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 0 +7dbe -1 0 0 -1 -1 0 -1 -1 0 -1 -1 0 -1 -1 -1 0 +7dbf -1 0 0 -1 -1 0 -1 -1 1 0 -1 0 -1 -1 -1 0 +7deb 0 -1 0 -1 0 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 +7def -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 +7dfa 0 -1 0 -1 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 0 +7dfb 0 -1 0 -1 0 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +7dfe -1 -1 0 -1 -1 -1 -1 -1 0 -1 -1 0 -1 -1 -1 0 +7dff -1 -1 0 -1 -1 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +7e5a 0 0 -1 -1 0 -1 -1 -1 0 0 -1 0 -1 0 -1 0 +7e5e -1 0 -1 -1 -1 -1 -1 -1 0 0 -1 0 -1 0 -1 0 +7e7a 0 1 0 -1 0 -1 -1 -1 0 0 -1 0 -1 0 -1 0 +7e7e 0 0 -1 -1 -1 -1 -1 -1 0 0 -1 0 -1 0 -1 0 +7ea5 0 0 -1 -1 -1 0 -1 -1 0 0 -1 0 0 -1 -1 0 +7ea7 1 0 0 -1 -1 0 -1 -1 0 0 -1 0 0 -1 -1 0 +7ebd 0 0 -1 -1 -1 0 -1 -1 0 0 -1 0 -1 -1 -1 0 +7ebf 1 0 0 -1 -1 0 -1 -1 0 0 -1 0 -1 -1 -1 0 +7edb 0 0 -1 -1 0 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 +7edf -1 0 -1 -1 -1 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 +7ee5 0 -1 -1 -1 -1 -1 -1 -1 0 0 -1 0 0 -1 -1 0 +7ee7 0 0 -1 -1 -1 -1 -1 -1 0 0 -1 0 0 -1 -1 0 +7efb 0 1 0 -1 0 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 +7efd 0 -1 -1 -1 -1 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 +7eff 1 0 -1 -1 -1 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 +7fad 0 0 -1 -1 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 0 +7faf 1 0 0 -1 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 0 +7fbd 0 0 -1 -1 -1 0 -1 -1 1 0 -1 0 -1 -1 -1 0 +7fbe 1 0 0 -1 -1 0 -1 -1 0 -1 -1 0 -1 -1 -1 0 +7fbf 1 0 0 -1 -1 0 -1 -1 1 0 -1 0 -1 -1 -1 0 +7fda 0 0 -1 -1 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 0 +7fdb 0 0 -1 -1 0 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +7fde -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 0 -1 -1 -1 0 +7fdf -1 0 -1 -1 -1 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +7feb 0 1 0 -1 0 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 +7fed 0 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 +7fef 0 0 -1 -1 -1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 +7ffa 0 1 0 -1 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 0 +7ffb 0 1 0 -1 0 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +7ffd 0 -1 -1 -1 -1 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +7ffe 0 0 -1 -1 -1 -1 -1 -1 0 -1 -1 0 -1 -1 -1 0 +7fff 0 0 -1 -1 -1 -1 -1 -1 1 0 -1 0 -1 -1 -1 0 +a55a 0 0 -1 0 0 -1 -1 0 0 0 0 -1 -1 0 0 -1 +a57e 0 0 -1 0 -1 -1 -1 0 0 0 0 -1 -1 0 0 -1 +a5a5 0 0 -1 0 -1 0 -1 0 0 0 0 -1 0 -1 0 -1 +a5bd 0 0 -1 0 -1 0 -1 0 0 0 0 -1 -1 -1 0 -1 +a5db 0 0 -1 0 0 -1 -1 0 0 0 0 -1 -1 -1 0 -1 +a5e7 0 0 -1 0 -1 -1 -1 0 0 0 0 -1 0 -1 0 -1 +a5ff 0 0 -1 0 1 -1 -1 0 0 0 0 -1 -1 -1 0 -1 +a75e -1 0 -1 0 -1 -1 -1 0 0 0 0 -1 -1 0 0 -1 +a77e 1 0 -1 0 -1 -1 -1 0 0 0 0 -1 -1 0 0 -1 +a7df -1 0 -1 0 -1 -1 -1 0 0 0 0 -1 -1 -1 0 -1 +a7e5 0 -1 -1 0 -1 -1 -1 0 0 0 0 -1 0 -1 0 -1 +a7e7 1 0 -1 0 -1 -1 -1 0 0 0 0 -1 0 -1 0 -1 +a7fd 0 -1 -1 0 -1 -1 -1 0 0 0 0 -1 -1 -1 0 -1 +a7ff 1 0 -1 0 -1 -1 -1 0 0 0 0 -1 -1 -1 0 -1 +aa55 0 -1 0 0 -1 -1 0 0 0 0 0 -1 0 0 -1 -1 +ab5d 0 -1 0 0 -1 -1 0 0 0 0 0 -1 -1 0 -1 -1 +abd5 0 -1 0 0 -1 -1 0 0 0 0 0 -1 0 -1 -1 -1 +abdd 0 -1 0 0 -1 -1 0 0 0 0 0 -1 -1 -1 -1 -1 +ad5b 0 0 -1 0 0 -1 -1 0 0 0 0 -1 -1 0 -1 -1 +ad7f 0 0 -1 0 -1 -1 -1 0 0 0 0 -1 -1 0 -1 -1 +adb5 0 0 -1 0 -1 0 -1 0 0 0 0 -1 0 -1 -1 -1 +adbd 0 0 -1 0 -1 0 -1 0 0 0 0 -1 -1 -1 -1 -1 +addb 0 0 -1 0 0 -1 -1 0 0 0 0 -1 -1 -1 -1 -1 +adf7 0 0 -1 0 -1 -1 -1 0 0 0 0 -1 0 -1 -1 -1 +adff 0 0 -1 0 1 -1 -1 0 0 0 0 -1 -1 -1 -1 -1 +ae57 -1 0 -1 0 -1 -1 -1 0 0 0 0 -1 0 0 -1 -1 +ae75 0 -1 -1 0 -1 -1 -1 0 0 0 0 -1 0 0 -1 -1 +ae77 1 0 -1 0 -1 -1 -1 0 0 0 0 -1 0 0 -1 -1 +af5f 1 0 -1 0 1 -1 -1 0 0 0 0 -1 -1 0 -1 -1 +af7d 0 -1 -1 0 -1 -1 -1 0 0 0 0 -1 -1 0 -1 -1 +af7f 1 0 -1 0 -1 -1 -1 0 0 0 0 -1 -1 0 -1 -1 +afd7 -1 0 -1 0 -1 -1 -1 0 0 0 0 -1 0 -1 -1 -1 +afdf 1 0 -1 0 1 -1 -1 0 0 0 0 -1 -1 -1 -1 -1 +aff5 0 1 -1 0 -1 1 -1 0 0 0 0 -1 0 -1 -1 -1 +aff7 1 0 -1 0 -1 -1 -1 0 0 0 0 -1 0 -1 -1 -1 +affd 0 1 -1 0 -1 1 -1 0 0 0 0 -1 -1 -1 -1 -1 +afff -1 0 -1 0 0 -1 -1 0 0 0 0 -1 -1 -1 -1 -1 +b5ad 0 0 -1 0 -1 0 -1 0 -1 0 0 -1 -1 -1 0 -1 +b5bd 0 0 -1 0 -1 0 -1 0 1 0 0 -1 -1 -1 0 -1 +b5da 0 0 -1 0 0 -1 -1 0 0 -1 0 -1 -1 -1 0 -1 +b5db 0 0 -1 0 0 -1 -1 0 1 0 0 -1 -1 -1 0 -1 +b5ef 0 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 0 -1 +b5fe 0 0 -1 0 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 -1 +b5ff 0 0 -1 0 -1 -1 -1 0 1 0 0 -1 -1 -1 0 -1 +b7de -1 0 -1 0 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 -1 +b7df -1 0 -1 0 -1 -1 -1 0 1 0 0 -1 -1 -1 0 -1 +b7ed 0 -1 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 0 -1 +b7ef 1 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 0 -1 +b7fd 0 -1 -1 0 -1 -1 -1 0 1 0 0 -1 -1 -1 0 -1 +b7fe 1 0 -1 0 -1 -1 -1 0 0 -1 0 -1 -1 -1 0 -1 +b7ff 0 1 -1 0 -1 -1 -1 0 1 0 0 -1 -1 -1 0 -1 +ba5d 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 -1 0 -1 -1 +bad5 0 -1 0 0 -1 -1 0 0 0 -1 0 -1 0 -1 -1 -1 +badd 0 -1 0 0 -1 -1 0 0 -1 -1 0 -1 -1 -1 -1 -1 +bb5d 0 -1 0 0 -1 -1 0 0 1 0 0 -1 -1 0 -1 -1 +bbd5 0 -1 0 0 -1 -1 0 0 0 1 0 -1 0 -1 -1 -1 +bbdd 0 -1 0 0 -1 -1 0 0 0 -1 0 -1 -1 -1 -1 -1 +bd5a 0 0 -1 0 0 -1 -1 0 0 0 -1 -1 -1 0 -1 -1 +bd5b 0 0 -1 0 0 -1 -1 0 1 0 0 -1 -1 0 -1 -1 +bd7e 0 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 -1 +bd7f 0 0 -1 0 -1 -1 -1 0 1 0 0 -1 -1 0 -1 -1 +bda5 0 0 -1 0 -1 0 -1 0 0 0 -1 -1 0 -1 -1 -1 +bdad 0 0 -1 0 -1 0 -1 0 -1 0 -1 -1 -1 -1 -1 -1 +bdb5 0 0 -1 0 -1 0 -1 0 0 1 0 -1 0 -1 -1 -1 +bdbd 0 0 -1 0 -1 0 -1 0 0 0 -1 -1 -1 -1 -1 -1 +bdda 0 0 -1 0 0 -1 -1 0 0 -1 -1 -1 -1 -1 -1 -1 +bddb 0 0 -1 0 0 -1 -1 0 0 0 -1 -1 -1 -1 -1 -1 +bde7 0 0 -1 0 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 -1 +bdef 0 0 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 -1 -1 -1 +bdf7 0 0 -1 0 -1 -1 -1 0 0 1 0 -1 0 -1 -1 -1 +bdfe 0 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 -1 +bdff 0 0 -1 0 1 -1 -1 0 0 0 -1 -1 -1 -1 -1 -1 +be5f -1 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 0 -1 -1 +be7d 0 -1 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 0 -1 -1 +be7f 1 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 0 -1 -1 +bed7 -1 0 -1 0 -1 -1 -1 0 0 -1 0 -1 0 -1 -1 -1 +bedf -1 0 -1 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 +bef5 0 -1 -1 0 -1 -1 -1 0 0 -1 0 -1 0 -1 -1 -1 +bef7 1 0 -1 0 -1 -1 -1 0 0 -1 0 -1 0 -1 -1 -1 +befd 0 -1 -1 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 +beff 1 0 -1 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 +bf5e -1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 -1 +bf5f -1 0 -1 0 -1 -1 -1 0 1 0 0 -1 -1 0 -1 -1 +bf7d 0 -1 -1 0 -1 -1 -1 0 1 0 0 -1 -1 0 -1 -1 +bf7e 1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 -1 +bf7f 1 0 -1 0 -1 -1 -1 0 1 0 0 -1 -1 0 -1 -1 +bfd7 -1 0 -1 0 -1 -1 -1 0 0 1 0 -1 0 -1 -1 -1 +bfde -1 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 -1 +bfdf -1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 -1 +bfe5 0 -1 -1 0 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 -1 +bfe7 1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 -1 +bfed 0 -1 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 -1 -1 -1 +bfef 1 0 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 -1 -1 -1 +bff5 0 -1 -1 0 -1 -1 -1 0 0 1 0 -1 0 -1 -1 -1 +bff7 1 0 -1 0 -1 -1 -1 0 0 1 0 -1 0 -1 -1 -1 +bffd 0 -1 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 -1 +bffe 1 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 -1 +bfff 1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 -1 +d5ab 0 0 0 -1 0 0 -1 -1 -1 0 0 -1 -1 -1 0 -1 +d5ba 0 0 0 -1 0 0 -1 -1 0 -1 0 -1 -1 -1 0 -1 +d5bb 0 0 0 -1 0 0 -1 -1 1 0 0 -1 -1 -1 0 -1 +d7af 0 0 0 -1 -1 0 -1 -1 -1 0 0 -1 -1 -1 0 -1 +d7be 0 0 0 -1 -1 0 -1 -1 0 -1 0 -1 -1 -1 0 -1 +d7bf 0 0 0 -1 -1 0 -1 -1 1 0 0 -1 -1 -1 0 -1 +d7eb 0 0 0 -1 0 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 +d7ef 0 0 0 -1 -1 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 +d7fa 0 0 0 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 0 -1 +d7fb 0 0 0 -1 0 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +d7fe 0 0 0 -1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 -1 +d7ff 0 0 0 -1 -1 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +da5b 0 0 0 -1 0 -1 0 -1 -1 0 0 -1 -1 0 -1 -1 +da7f 0 0 0 -1 -1 -1 0 -1 -1 0 0 -1 -1 0 -1 -1 +dab5 0 0 0 -1 -1 0 0 -1 0 -1 0 -1 0 -1 -1 -1 +dabd 0 0 0 -1 -1 0 0 -1 -1 -1 0 -1 -1 -1 -1 -1 +dadb 0 0 0 -1 0 -1 0 -1 -1 -1 0 -1 -1 -1 -1 -1 +daf7 0 0 0 -1 -1 -1 0 -1 0 -1 0 -1 0 -1 -1 -1 +daff 0 0 0 -1 1 -1 0 -1 -1 -1 0 -1 -1 -1 -1 -1 +db5a 0 0 0 -1 0 -1 0 -1 0 0 -1 -1 -1 0 -1 -1 +db5b 0 0 0 -1 0 -1 0 -1 1 0 0 -1 -1 0 -1 -1 +db7e 0 0 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 0 -1 -1 +db7f 0 0 0 -1 -1 -1 0 -1 1 0 0 -1 -1 0 -1 -1 +dba5 0 0 0 -1 -1 0 0 -1 0 0 -1 -1 0 -1 -1 -1 +dbad 0 0 0 -1 -1 0 0 -1 -1 0 -1 -1 -1 -1 -1 -1 +dbb5 0 0 0 -1 -1 0 0 -1 0 1 0 -1 0 -1 -1 -1 +dbbd 0 0 0 -1 -1 0 0 -1 0 0 -1 -1 -1 -1 -1 -1 +dbda 0 0 0 -1 0 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 +dbdb 0 0 0 -1 0 -1 0 -1 0 0 -1 -1 -1 -1 -1 -1 +dbe7 0 0 0 -1 -1 -1 0 -1 0 0 -1 -1 0 -1 -1 -1 +dbef 0 0 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 +dbf7 0 0 0 -1 -1 -1 0 -1 0 1 0 -1 0 -1 -1 -1 +dbfe 0 0 0 -1 -1 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 +dbff 0 0 0 -1 1 -1 0 -1 0 0 -1 -1 -1 -1 -1 -1 +ddab 0 0 0 -1 0 0 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +ddba 0 0 0 -1 0 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +ddbb 0 0 0 -1 0 0 -1 -1 1 0 -1 -1 -1 -1 -1 -1 +de7b 0 0 0 -1 0 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 +de7f 0 0 0 -1 -1 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 +deb7 0 0 0 -1 -1 0 -1 -1 0 -1 0 -1 0 -1 -1 -1 +debf 0 0 0 -1 -1 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +def7 0 0 0 -1 -1 -1 -1 -1 0 -1 0 -1 0 -1 -1 -1 +defb 0 0 0 -1 0 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +deff 0 0 0 -1 1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +df7a 0 0 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 0 -1 -1 +df7b 0 0 0 -1 0 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +df7e 0 0 0 -1 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 -1 +df7f 0 0 0 -1 -1 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +dfa7 0 0 0 -1 -1 0 -1 -1 0 0 -1 -1 0 -1 -1 -1 +dfaf 0 0 0 -1 1 0 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +dfb7 0 0 0 -1 -1 0 -1 -1 0 1 0 -1 0 -1 -1 -1 +dfbe 0 0 0 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +dfbf 0 0 0 -1 -1 0 -1 -1 0 0 -1 -1 -1 -1 -1 -1 +dfe7 0 0 0 -1 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 -1 +dfeb 0 0 0 -1 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +dfef 0 0 0 -1 1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +dff7 0 0 0 -1 -1 -1 -1 -1 0 1 0 -1 0 -1 -1 -1 +dffa 0 0 0 -1 0 1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +dffb 0 0 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 +dffe 0 0 0 -1 -1 1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +dfff 0 0 0 -1 1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 +e57a 0 -1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 0 0 -1 +e57e -1 -1 0 -1 -1 -1 -1 -1 0 0 0 -1 -1 0 0 -1 +e5a7 -1 0 0 -1 -1 0 -1 -1 0 0 0 -1 0 -1 0 -1 +e5bf -1 0 0 -1 -1 0 -1 -1 0 0 0 -1 -1 -1 0 -1 +e5e7 -1 -1 0 -1 -1 -1 -1 -1 0 0 0 -1 0 -1 0 -1 +e5fb 0 -1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 +e5ff 1 -1 0 -1 1 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 +e75a 0 0 -1 -1 0 -1 -1 -1 0 0 0 -1 -1 0 0 -1 +e75e -1 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 -1 0 0 -1 +e77a 0 1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 0 0 -1 +e77e 0 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 -1 0 0 -1 +e7a5 0 0 -1 -1 -1 0 -1 -1 0 0 0 -1 0 -1 0 -1 +e7a7 1 0 0 -1 -1 0 -1 -1 0 0 0 -1 0 -1 0 -1 +e7bd 0 0 -1 -1 -1 0 -1 -1 0 0 0 -1 -1 -1 0 -1 +e7bf 1 0 0 -1 -1 0 -1 -1 0 0 0 -1 -1 -1 0 -1 +e7db 0 0 -1 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 +e7df -1 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 +e7e5 0 -1 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 -1 0 -1 +e7e7 0 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 -1 0 -1 +e7fb 0 1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 +e7fd 0 -1 -1 -1 -1 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 +e7ff 1 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 -1 -1 0 -1 +ea57 -1 0 0 -1 -1 -1 0 -1 0 0 0 -1 0 0 -1 -1 +ea75 0 -1 0 -1 -1 -1 0 -1 0 0 0 -1 0 0 -1 -1 +ea77 1 0 0 -1 -1 -1 0 -1 0 0 0 -1 0 0 -1 -1 +eb5f -1 0 0 -1 -1 -1 0 -1 0 0 0 -1 -1 0 -1 -1 +eb7d 0 -1 0 -1 -1 -1 0 -1 0 0 0 -1 -1 0 -1 -1 +eb7f 1 0 0 -1 -1 -1 0 -1 0 0 0 -1 -1 0 -1 -1 +ebd7 -1 0 0 -1 -1 -1 0 -1 0 0 0 -1 0 -1 -1 -1 +ebdf -1 0 0 -1 -1 -1 0 -1 0 0 0 -1 -1 -1 -1 -1 +ebf5 0 -1 0 -1 -1 -1 0 -1 0 0 0 -1 0 -1 -1 -1 +ebf7 1 0 0 -1 -1 -1 0 -1 0 0 0 -1 0 -1 -1 -1 +ebfd 0 -1 0 -1 -1 -1 0 -1 0 0 0 -1 -1 -1 -1 -1 +ebff 1 0 0 -1 -1 -1 0 -1 0 0 0 -1 -1 -1 -1 -1 +ed7b 0 -1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 +ed7f -1 -1 0 -1 -1 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 +edb7 -1 0 0 -1 -1 0 -1 -1 0 0 0 -1 0 -1 -1 -1 +edbf -1 0 0 -1 -1 0 -1 -1 0 0 0 -1 -1 -1 -1 -1 +edf7 -1 -1 0 -1 -1 -1 -1 -1 0 0 0 -1 0 -1 -1 -1 +edfb 0 -1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 +edff 1 -1 0 -1 1 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 +ee57 -1 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 0 -1 -1 +ee75 0 -1 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 0 -1 -1 +ee77 1 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 0 -1 -1 +ef5b 0 0 -1 -1 0 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 +ef5f 1 0 -1 -1 1 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 +ef7b 0 1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 +ef7d 0 -1 -1 -1 -1 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 +ef7f 0 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 +efb5 0 0 -1 -1 -1 0 -1 -1 0 0 0 -1 0 -1 -1 -1 +efb7 1 0 0 -1 -1 0 -1 -1 0 0 0 -1 0 -1 -1 -1 +efbd 0 0 -1 -1 -1 0 -1 -1 0 0 0 -1 -1 -1 -1 -1 +efbf 1 0 0 -1 -1 0 -1 -1 0 0 0 -1 -1 -1 -1 -1 +efd7 -1 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 -1 -1 -1 +efdb 0 0 -1 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 +efdf 1 0 -1 -1 1 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 +eff5 0 1 -1 -1 -1 1 -1 -1 0 0 0 -1 0 -1 -1 -1 +eff7 0 0 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 -1 -1 -1 +effb 0 1 0 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 +effd 0 1 -1 -1 -1 1 -1 -1 0 0 0 -1 -1 -1 -1 -1 +efff -1 0 -1 -1 0 -1 -1 -1 0 0 0 -1 -1 -1 -1 -1 +f5af 1 0 0 -1 1 0 -1 -1 -1 0 0 -1 -1 -1 0 -1 +f5be -1 0 0 -1 -1 0 -1 -1 0 -1 0 -1 -1 -1 0 -1 +f5bf -1 0 0 -1 -1 0 -1 -1 1 0 0 -1 -1 -1 0 -1 +f5eb 0 -1 0 -1 0 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 +f5ef 1 -1 0 -1 1 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 +f5fa 0 1 0 -1 0 1 -1 -1 0 -1 0 -1 -1 -1 0 -1 +f5fb 0 -1 0 -1 0 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +f5fe -1 1 0 -1 -1 1 -1 -1 0 -1 0 -1 -1 -1 0 -1 +f5ff 1 -1 0 -1 1 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +f7ad 0 0 -1 -1 -1 0 -1 -1 -1 0 0 -1 -1 -1 0 -1 +f7af 1 0 0 -1 -1 0 -1 -1 -1 0 0 -1 -1 -1 0 -1 +f7bd 0 0 -1 -1 -1 0 -1 -1 1 0 0 -1 -1 -1 0 -1 +f7be 1 0 0 -1 -1 0 -1 -1 0 -1 0 -1 -1 -1 0 -1 +f7bf 0 0 1 -1 -1 0 -1 -1 1 0 0 -1 -1 -1 0 -1 +f7da 0 0 -1 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 0 -1 +f7db 0 0 -1 -1 0 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +f7de -1 0 -1 -1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 -1 +f7df -1 0 -1 -1 -1 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +f7eb 0 1 0 -1 0 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 +f7ed 0 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 +f7ef 0 0 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 +f7fa 0 1 0 -1 0 -1 -1 -1 0 -1 0 -1 -1 -1 0 -1 +f7fb 0 1 0 -1 0 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +f7fd 0 -1 -1 -1 -1 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +f7fe 0 0 -1 -1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 0 -1 +f7ff 0 0 -1 -1 -1 -1 -1 -1 1 0 0 -1 -1 -1 0 -1 +fa5f 1 0 0 -1 1 -1 0 -1 -1 0 0 -1 -1 0 -1 -1 +fa7d 0 -1 0 -1 -1 -1 0 -1 -1 0 0 -1 -1 0 -1 -1 +fa7f 1 0 0 -1 -1 -1 0 -1 -1 0 0 -1 -1 0 -1 -1 +fad7 -1 0 0 -1 -1 -1 0 -1 0 -1 0 -1 0 -1 -1 -1 +fadf 1 0 0 -1 1 -1 0 -1 -1 -1 0 -1 -1 -1 -1 -1 +faf5 0 1 0 -1 -1 1 0 -1 0 -1 0 -1 0 -1 -1 -1 +faf7 1 0 0 -1 -1 -1 0 -1 0 -1 0 -1 0 -1 -1 -1 +fafd 0 1 0 -1 -1 1 0 -1 -1 -1 0 -1 -1 -1 -1 -1 +faff -1 0 0 -1 0 -1 0 -1 -1 -1 0 -1 -1 -1 -1 -1 +fb5e -1 0 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 0 -1 -1 +fb5f -1 0 0 -1 -1 -1 0 -1 1 0 0 -1 -1 0 -1 -1 +fb7d 0 -1 0 -1 -1 -1 0 -1 1 0 0 -1 -1 0 -1 -1 +fb7e 1 0 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 0 -1 -1 +fb7f 0 1 0 -1 -1 -1 0 -1 1 0 0 -1 -1 0 -1 -1 +fbd7 -1 0 0 -1 -1 -1 0 -1 0 1 0 -1 0 -1 -1 -1 +fbde -1 0 0 -1 -1 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 +fbdf -1 0 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 -1 -1 -1 +fbe5 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 0 -1 -1 -1 +fbe7 1 0 0 -1 -1 -1 0 -1 0 0 -1 -1 0 -1 -1 -1 +fbed 0 -1 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 +fbef 1 0 0 -1 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 +fbf5 0 -1 0 -1 -1 -1 0 -1 0 1 0 -1 0 -1 -1 -1 +fbf7 1 0 0 -1 -1 -1 0 -1 0 1 0 -1 0 -1 -1 -1 +fbfd 0 -1 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 -1 -1 -1 +fbfe 1 0 0 -1 -1 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 +fbff 1 0 0 -1 -1 -1 0 -1 0 0 -1 -1 -1 -1 -1 -1 +fd7a 0 -1 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 0 -1 -1 +fd7b 0 -1 0 -1 0 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +fd7e -1 -1 0 -1 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 -1 +fd7f -1 -1 0 -1 -1 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +fda7 -1 0 0 -1 -1 0 -1 -1 0 0 -1 -1 0 -1 -1 -1 +fdaf 1 0 0 -1 1 0 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +fdb7 -1 0 0 -1 -1 0 -1 -1 0 1 0 -1 0 -1 -1 -1 +fdbe -1 0 0 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +fdbf -1 0 0 -1 -1 0 -1 -1 0 0 -1 -1 -1 -1 -1 -1 +fde7 -1 -1 0 -1 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 -1 +fdeb 0 -1 0 -1 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +fdef 1 -1 0 -1 1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +fdf7 -1 -1 0 -1 -1 -1 -1 -1 0 1 0 -1 0 -1 -1 -1 +fdfa 0 1 0 -1 0 1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +fdfb 0 -1 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 +fdfe -1 1 0 -1 -1 1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +fdff 1 -1 0 -1 1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 +fe5b 0 0 -1 -1 0 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 +fe5f 1 0 -1 -1 1 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 +fe7b 0 1 0 -1 0 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 +fe7d 0 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 +fe7f 0 0 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 +feb5 0 0 -1 -1 -1 0 -1 -1 0 -1 0 -1 0 -1 -1 -1 +feb7 1 0 0 -1 -1 0 -1 -1 0 -1 0 -1 0 -1 -1 -1 +febd 0 0 -1 -1 -1 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +febf 1 0 0 -1 -1 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +fed7 -1 0 -1 -1 -1 -1 -1 -1 0 -1 0 -1 0 -1 -1 -1 +fedb 0 0 -1 -1 0 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +fedf 1 0 -1 -1 1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +fef5 0 1 -1 -1 -1 1 -1 -1 0 -1 0 -1 0 -1 -1 -1 +fef7 0 0 -1 -1 -1 -1 -1 -1 0 -1 0 -1 0 -1 -1 -1 +fefb 0 1 0 -1 0 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +fefd 0 1 -1 -1 -1 1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +feff -1 0 -1 -1 0 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 +ff5a 0 0 1 -1 0 -1 1 -1 0 0 -1 -1 -1 0 -1 -1 +ff5b 0 0 -1 -1 0 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +ff5e -1 0 1 -1 -1 -1 1 -1 0 0 -1 -1 -1 0 -1 -1 +ff5f 1 0 -1 -1 1 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +ff7a 0 1 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 0 -1 -1 +ff7b 0 0 1 -1 0 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +ff7d 0 -1 -1 -1 -1 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +ff7e 0 -1 0 -1 -1 -1 -1 -1 0 0 -1 -1 -1 0 -1 -1 +ff7f 0 0 -1 -1 -1 -1 -1 -1 1 0 0 -1 -1 0 -1 -1 +ffa5 0 0 1 -1 -1 0 1 -1 0 0 -1 -1 0 -1 -1 -1 +ffa7 1 0 0 -1 -1 0 -1 -1 0 0 -1 -1 0 -1 -1 -1 +ffad 0 0 1 -1 -1 0 1 -1 -1 0 -1 -1 -1 -1 -1 -1 +ffaf -1 0 0 -1 0 0 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +ffb5 0 0 -1 -1 -1 0 -1 -1 0 1 0 -1 0 -1 -1 -1 +ffb7 0 0 1 -1 -1 0 -1 -1 0 1 0 -1 0 -1 -1 -1 +ffbd 0 0 1 -1 -1 0 1 -1 0 0 -1 -1 -1 -1 -1 -1 +ffbe 1 0 0 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +ffbf 1 0 0 -1 -1 0 -1 -1 0 0 -1 -1 -1 -1 -1 -1 +ffd7 -1 0 -1 -1 -1 -1 -1 -1 0 1 0 -1 0 -1 -1 -1 +ffda 0 0 1 -1 0 -1 1 -1 0 -1 -1 -1 -1 -1 -1 -1 +ffdb 0 0 1 -1 0 -1 1 -1 0 0 -1 -1 -1 -1 -1 -1 +ffde -1 0 1 -1 -1 -1 1 -1 0 -1 -1 -1 -1 -1 -1 -1 +ffdf -1 0 1 -1 -1 -1 1 -1 0 0 -1 -1 -1 -1 -1 -1 +ffe5 0 -1 1 -1 -1 -1 1 -1 0 0 -1 -1 0 -1 -1 -1 +ffe7 0 -1 0 -1 -1 -1 -1 -1 0 0 -1 -1 0 -1 -1 -1 +ffeb 0 1 0 -1 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +ffed 0 -1 1 -1 -1 -1 1 -1 -1 0 -1 -1 -1 -1 -1 -1 +ffef -1 -1 0 -1 0 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 +fff5 0 1 -1 -1 -1 1 -1 -1 0 1 0 -1 0 -1 -1 -1 +fff7 0 0 -1 -1 -1 -1 -1 -1 0 1 0 -1 0 -1 -1 -1 +fffa 0 -1 0 -1 0 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +fffb 0 1 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 +fffd 0 -1 1 -1 -1 -1 1 -1 0 0 -1 -1 -1 -1 -1 -1 +fffe -1 -1 0 -1 -1 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 +ffff -1 -1 0 -1 0 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1 diff --git a/research/two-block-signatures/source/6691-PROOF.md b/research/two-block-signatures/source/6691-PROOF.md new file mode 100644 index 0000000000..b13a9a6c98 --- /dev/null +++ b/research/two-block-signatures/source/6691-PROOF.md @@ -0,0 +1,115 @@ +# Proof: which plane-level signatures an invertible 4x4 basis can have + +Setting, as in [PR3997](../rational-joint-support-screen/README.md): four ports +split into plane A = {0, 1} and plane B = {2, 3}, and four messages. For an +invertible matrix P over a field K, with inverse Q, message j has a *source +support* (the nonzero entries of column j of P) and a *reader support* (the +nonzero entries of row j of Q). Each support is replaced by the set of planes it +meets, encoded 1 = A, 2 = B, 3 = both. The **signature** of P is the four pairs +(source mask, reader mask). A column of an invertible matrix and a row of its +inverse are nonzero, so all eight masks are nonempty. PR3997 prices a basis from +its signature alone. + +Notation: `e_j` is the j-th coordinate row vector of K^4 and +`H_j = {x : x_j = 0}` is the j-th coordinate hyperplane. The standard bilinear +form `x.y = sum x_i y_i` is nondegenerate on K^4, so `(W^perp)^perp = W` for every +subspace W (the dimensions agree and `W` lies in `(W^perp)^perp`). + +## Lemma 1: the signature only sees two complementary planes + +Let T and U be the 2x4 blocks formed by rows 0,1 and rows 2,3 of P, and let +`W_A = rowspace(T)`, `W_B = rowspace(U)`. Then `K^4 = W_A + W_B` (direct), and for +every message j: + +* (a) A is in the source mask of j iff `W_A` is not contained in `H_j`; B is in + it iff `W_B` is not contained in `H_j`. +* (b) A is in the reader mask of j iff `e_j` is not in `W_B`; B is in it iff + `e_j` is not in `W_A`. + +Conversely, every ordered pair of complementary 2-planes arises, by stacking a +basis of each as rows. + +*Proof.* The four rows of P are independent, so the sum is direct. (a) Column j +of T is zero iff every row of T has j-th coordinate 0, iff `W_A` lies in `H_j`. +The same holds for U and `W_B`. (b) Write `Q = [Q_A | Q_B]` with 4x2 blocks for +columns 0,1 and columns 2,3. The identity `PQ = I` gives `T Q_B = 0` and +`U Q_B = I_2`. The second equation shows `rank Q_B = 2`; the first shows that +the column space of `Q_B` lies in `ker T`, which has dimension 2. Hence +`col(Q_B) = ker T = W_A^perp`. Row j of `Q_B` is zero iff every vector of +`W_A^perp` has j-th coordinate 0, iff `e_j` lies in `(W_A^perp)^perp = W_A`. +So B is in the reader mask of j iff `e_j` is not in `W_A`. Exchanging T with U +(and A with B) gives the statement for A. The converse is the choice of rows. QED + +Nothing here depends on the values of the entries of P: two matrices with the +same pair of row spaces have the same signature, whatever cancellations occur. + +## Lemma 2: three necessary conditions + +Put `E_X = {j : e_j in W_X}` and `F_X = {j : W_X inside H_j}` for X = A, B. Then + +1. `E_A` and `E_B` are disjoint, and so are `F_A` and `F_B` (a common j would put + `W_A + W_B = K^4` inside `H_j`, or `e_j` in `W_A` and `W_B`, whose intersection is 0); +2. `E_X` and `F_X` are disjoint, because `e_j` is not in `H_j`; +3. `|E_X| <= 2`, because the `e_j` are independent and `dim W_X = 2`, and + `|F_X| <= 2`, because `W_X` lies in a subspace of codimension `|F_X|` and has dimension 2; +4. if `|E_X| = 2` then `W_X` is spanned by those two coordinate vectors, so + `F_X` is the complement of `E_X`; if `|F_X| = 2` then + `W_X = intersection of the two H_j`, the span of the other two coordinate + vectors, so `E_X` is the complement of `F_X`. + +By Lemma 1 and item 1, the source mask of j is exactly {A} iff `j in F_B`, exactly +{B} iff `j in F_A`; the reader mask of j is exactly {A} iff `j in E_A`, exactly +{B} iff `j in E_B`. The conditions below follow. + +* **C1.** No message has (source, reader) = ({A},{B}) or ({B},{A}). Otherwise + `j in F_B and E_B`, or `j in F_A and E_A`, contradicting item 2. +* **C2.** At most two messages have source mask {A}, at most two {B}, and the + same for reader masks. These counts are `|F_B|, |F_A|, |E_A|, |E_B|`; use item 3. +* **C3.** If two messages have source mask {A}, the other two have reader mask + {B}; if two have source mask {B}, the other two have reader mask {A}. If two + messages have reader mask {A}, the other two have source mask {B}; if two have + reader mask {B}, the other two have source mask {A}. These are item 4: for + example `|F_B| = 2` makes `E_B` the complement of `F_B`. + +Let N be the set of signatures satisfying C1, C2 and C3. Then: + +**Theorem.** For every field K, the signature of every `P in GL_4(K)` lies in N. +`|N| = 439`, counted by enumerating all `9^4 = 6561` candidate signatures +(`verify.py`). Over Q the signatures of integer matrices with entries in +{-1, 0, 1} already fill N: `verify.py` exhibits one explicit integer witness per +element and checks each by exact rational inversion. So over Q, and over every +field of characteristic 0, the set of realizable signatures is exactly N. + +N equals the set of 439 signature codes that PR3997 records in +`TERNARY-SCREEN.txt` (`verify.py` compares the two code sets). PR3997's verifier +equates that set with its generic-support census, so the realizable set is the +generic census, with no cancellation signature added. + +## Consequence for the PR3997 invoice + +PR3997's pricing of a basis on a plane pair is `sum over the four messages of +cost(source mask, reader mask)`, a function of the signature only. Its +`RESULT.json` records the minimum over the 439 generic signatures as 8 on each of +the 1,540 plane pairs, with no strict improvement. Because every invertible basis +over any coefficient field has a signature in N, the minimum over all bases is the +same 8: special rational values cannot lower the two-plane copy invoice below the +separate-plane baseline in this model. This is a consistency check, not a new +result: [PR4365](https://github.com/CrocSwap/integer-mult-bounds/pull/4365) +(`research/two-plane-copy-floor`) proves the stronger statement that COPY mass 8 is a +floor for any finite scalar factorization on two matched planes, over every field. +What is new here is the classification of the signatures themselves. + +## What the three conditions cost + +Dropping one condition enlarges the candidate set (`RESULT.json`): without C1 the +set has 555 elements, without C2 805, without C3 1,771. None is redundant. The +439 signatures that survive all three are all realized, so the conditions are +also sufficient over Q. + +## Scope + +The theorem is about plane-level signatures of invertible 4x4 matrices with two +planes of two ports. It does not classify the finer joint zero pattern of P and +`P^-1`, price any coefficient arithmetic, or treat three or more planes, +overcomplete factorizations or physical routing; PR3997 lists these as outside its +scope as well. diff --git a/research/two-block-signatures/source/6691-README.md b/research/two-block-signatures/source/6691-README.md new file mode 100644 index 0000000000..e3e9781e58 --- /dev/null +++ b/research/two-block-signatures/source/6691-README.md @@ -0,0 +1,144 @@ +# Plane-level signatures of invertible 4x4 bases: cancellations add none + +**Scoped proof with exact finite corroboration; no new κ.** The selected result, +the selected suppliers and `upstream/` are unchanged. + +[PR3997](../rational-joint-support-screen/README.md) (Gonzalo-Mier, +`research/rational-joint-support-screen`) prices a joint 4x4 basis on two planes +of two ports each from its **plane-level signature**. For each of the four +messages, the signature records which planes its source support (a column of P) +and its reader support (a row of P^-1) meet. PR3997 finds 439 signatures from +generic coefficients, the same 439 from all 3^16 signed ternary matrices, and +minimum copy invoice 8 on each of the 1,540 plane pairs. It leaves open whether +rational values outside {-1, 0, 1}, through exact cofactor cancellations, give a +signature outside those 439 and lower the invoice. + +A later merged package, CubeJerry's +[PR4365](https://github.com/CrocSwap/integer-mult-bounds/pull/4365) +(`research/two-plane-copy-floor`), settles the *invoice* half of that question +more strongly. By a rank argument, the COPY mass on any two matched planes is at +least 8 for arbitrary coefficients, over every field, for any number of scalar +messages. It does not classify signatures. This package answers the structural +question: which plane-level signatures can an invertible basis have at all? The +invoice consequence below agrees with PR4365 and does not improve it. + +**Answer to the signature question: no cancellation adds one.** Over any field, +the plane-level signature of an invertible 4x4 matrix lies in a set N of 439 +signatures defined by three conditions. Over Q the signatures fill N exactly. N is +the set of signature codes recorded by PR3997. So no coefficient value, however +special, adds a signature to the 439. + +## Result + +1. **Exact parametrization (Lemma 1).** The signature of P depends only on the + row spaces `W_A`, `W_B` of its top and bottom port pairs, two complementary + 2-planes of K^4. A source mask tests whether a plane lies in a coordinate + hyperplane. A reader mask tests whether a coordinate vector lies in the + *other* plane. Coefficient values enter only through these row spaces. +2. **Three necessary conditions (Lemma 2).** C1: no message has source mask {A} + with reader mask {B}, or the reverse. C2: at most two messages are confined to + one plane, on either side. C3: two confined messages on one side force the + other two to be confined to the opposite plane on the other side. All three + follow from Lemma 1; see [PROOF.md](PROOF.md). +3. **Tightness.** Exactly 439 of the 6,561 candidate signatures satisfy C1, C2 + and C3. Each is realized by an explicit integer matrix with entries in + {-1, 0, 1}; [WITNESSES.json](WITNESSES.json) holds all 439, each checked by + exact rational inversion. +4. **Consequence (not new).** PR3997's pricing is a function of the signature, + and its `RESULT.json` records minimum 8 on all 1,540 plane pairs over these 439 + signatures. The same minimum therefore holds for every invertible 4x4 basis + over any field, including every cofactor-cancellation stratum. PR4365 proves + the stronger statement that 8 is a floor for arbitrary scalar factorizations. + This is its signature-level counterpart. + +## Evidence + +| Check | Result | +|---|---| +| Candidate signatures | 9^4 = 6,561 | +| Pass C1, C2 and C3 | 439 | +| Pass two conditions (without C1 / C2 / C3) | 555 / 805 / 1,771 | +| Equal to the 439 codes in PR3997's `TERNARY-SCREEN.txt` | yes | +| Distinct planes spanned by two ternary vectors | 362 | +| Signatures of all their complementary pairs | 439, none outside N | +| Integer witnesses, exact rational inversion | 439 | +| F_2: planes / complementary pairs / signatures | 35 / 560 / 355 | +| F_3: planes / complementary pairs / signatures | 130 / 10,530 / 439 | +| F_5: planes / complementary pairs / signatures | 806 / 503,750 / 439 | +| F_7 (opt-in `--extended`): planes / pairs / signatures | 2,850 / 6,842,850 / 439 | +| Plane rule against direct inversion | every pair at F_2 and F_3; every 61st at F_5; every 997th at F_7 | +| Direct census of all of GL_4(F_2) | 20,160 matrices, the same 355 signatures | +| Rejection controls | 11 | + +The finite-field counts follow from the formula `(q^2+1)(q^2+q+1)` planes and +`q^4` complements per plane. They corroborate Lemma 1 on every complementary +pair; the proof does not use them. Over F_2 only 355 of the 439 signatures occur, +so the statement "the realizable set is N" is a statement about Q and about fields +where all 439 occur (F_3, F_5 and F_7 by enumeration). + +## Reproduce + +From the repository root; the standard library suffices: + +```sh +python3.12 -I -B research/two-plane-signature-classes/verify.py +python3.12 -I -O -B research/two-plane-signature-classes/verify.py +python3.12 scripts/research_package.py --package research/two-plane-signature-classes +``` + +Each verifier run takes a few seconds and prints +`PASS_TWO_PLANE_SIGNATURE_CLASSES`. It recomputes `RESULT.json` and +`WITNESSES.json` and compares their bytes. `--write` regenerates both. `--extended` +adds the F_7 enumeration (about 13 seconds) and compares nothing. + +The verifier also binds to two committed PR3997 files by SHA256: its +`TERNARY-SCREEN.txt` (the 439 recorded signature codes) and its `RESULT.json` (the +recorded minimum 8 on 1,540 pairs). It does not recompute any plane pricing. + +## Limitations + +- The theorem concerns plane-level signatures of invertible 4x4 matrices with two + planes of two ports. The finer joint zero pattern of P and P^-1, which the + original question called the cofactor strata, is not classified. It is not + needed for the invoice. +- The invoice consequence relies on PR3997's definition of the pricing (a function + of the signature) and on its recorded minimum. This package does not rerun them. + The invoice floor itself is PR4365's theorem; nothing here lowers or re-proves it. +- Three or more planes, overcomplete factorizations, coefficient scaling cost, + physical routing and restoration, and any change to a selected supplier are + outside scope, as they are in PR3997. +- No independent human or formal proof-kernel review is claimed. The finite checks + corroborate Lemma 1; the proof is the written argument in [PROOF.md](PROOF.md). + +## Open next questions + +The structured versions, with relevance and blockers, are in +[TASK.json](TASK.json). + +1. **Two planes of three ports (6x6).** Lemma 1 holds verbatim for two planes of + d ports. Is the realizable signature set still the generic census for d = 3? + First step: enumerate complementary 3-planes of F_2^6 (1,395 planes, 714,240 + complementary ordered pairs) by incidence data, and compare with the + necessary-condition set. Blocker: the generic 6x6 census has 2^36 supports, so + it needs an incidence-based generator. +2. **Three planes of two ports.** The reader test generalizes to "e_j is not in the + sum of the other planes". Does a third plane make cancellation signatures + possible? PR4365's first open question asks for a genuinely joint three-plane + decoder and names 49 closure-pair tariffs, which appear to be the 7 x 7 source + and reader masks of three planes. First step: the same enumeration over + complementary plane triples in F_2^6. Blocker: 49^6 candidate signatures need + symmetry reduction. +3. **Port-level pricing.** A model that reads which individual ports a support + meets would see the finer zero patterns of P and P^-1. First step: classify + pairs of supports `(supp P, supp P^-1)` for 4x4 matrices over F_3, where + cancellation is plentiful. Blocker: no pricing model reading port-level + supports has been written down. + +## Credit + +This package was produced by Nick Petalas. It answers the open question left by +Gonzalo-Mier's PR3997 (`research/rational-joint-support-screen`) and builds on its +signature model, its generic and signed-ternary censuses and its recorded pricing +result, and on the earlier binary screen of Gonzalo-Mier's PR3990. CubeJerry's +PR4365 proves the invoice floor for arbitrary scalar factorizations; it is cited, +not built upon. Apache-2.0. diff --git a/research/two-block-signatures/source/6691-RESULT.json b/research/two-block-signatures/source/6691-RESULT.json new file mode 100644 index 0000000000..27f6b53314 --- /dev/null +++ b/research/two-block-signatures/source/6691-RESULT.json @@ -0,0 +1,69 @@ +{ + "ablation_sizes_when_dropping": { + "C1": 555, + "C1+C2": 1995, + "C1+C2+C3": 6561, + "C1+C3": 3969, + "C2": 805, + "C2+C3": 2401, + "C3": 1771 + }, + "candidate_signatures": 6561, + "controls_passed": 11, + "finite_field_plane_pair_census": { + "F_2": { + "complementary_pairs": 560, + "direct_inversions": 560, + "direct_stride": 1, + "planes": 35, + "signatures_realized": 355, + "subset_of_necessary_set": true, + "swapped_rule_disagreements": 506 + }, + "F_3": { + "complementary_pairs": 10530, + "direct_inversions": 10530, + "direct_stride": 1, + "planes": 130, + "signatures_realized": 439, + "subset_of_necessary_set": true, + "swapped_rule_disagreements": 6366 + }, + "F_5": { + "complementary_pairs": 503750, + "direct_inversions": 8258, + "direct_stride": 61, + "planes": 806, + "signatures_realized": 439, + "subset_of_necessary_set": true, + "swapped_rule_disagreements": 2282 + } + }, + "gl4_f2_invertible_matrices": 20160, + "gl4_f2_signatures": 355, + "necessary_set_codes_sha256": "4e823f465d13742455f079f18ed852f3c19750cbc3e63f6737037610609b8746", + "necessary_set_size": 439, + "predecessor_binding": { + "receipt_codes": 439, + "receipt_sha256": "ded4c54c486864dd3d3c2084bbb15f471bb7926af21f6d0c8a4582312a1001ac", + "recorded_minimum_copy_cost": 8, + "recorded_plane_pairs": 1540, + "recorded_strict_improvements": 0, + "result_json_sha256": "94b49bffa5826e6d38e278beefe2de9e145d991945a9a09348d075093453390c" + }, + "schema": "two-plane-signature-classes-v1", + "scope_limits": [ + "plane-level signatures of invertible 4x4 matrices over any field; two planes of two ports", + "the copy-invoice consequence uses PR3997's recorded minimum 8 on 1540 plane pairs and its statement that pricing depends only on the signature", + "overcomplete factorizations, three or more planes, coefficient scaling cost and physical routing are outside scope" + ], + "size_keeping_only_condition": { + "C1": 2401, + "C2": 3969, + "C3": 1995 + }, + "ternary_planes": 362, + "ternary_signatures_realized": 439, + "witness_count": 439, + "witnesses_sha256": "26ec99926055f3938e69038d1d0dacb844f89c40bc67359d3382c83e41e06ae2" +} diff --git a/research/two-block-signatures/source/LICENSE b/research/two-block-signatures/source/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/two-block-signatures/source/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. From 9417d35f070e2a64b6b174d549013cdcc5233794 Mon Sep 17 00:00:00 2001 From: SHIN09-git Date: Wed, 4 Nov 2026 12:06:57 +0800 Subject: [PATCH 2/4] Classify two-block decoder signatures over every field --- research/two-block-signatures/COUNTING.md | 41 ++ research/two-block-signatures/OVERLAP.json | 163 +++++++ .../PRICE-CERTIFICATES.json | 23 + research/two-block-signatures/PROOF.md | 95 ++++ research/two-block-signatures/README.md | 44 ++ research/two-block-signatures/RESULT.json | 429 ++++++++++++++++++ research/two-block-signatures/SIX-PORTS.json | 190 ++++++++ research/two-block-signatures/SOURCES.json | 98 ++++ research/two-block-signatures/TASK.json | 81 ++++ research/two-block-signatures/VALIDATION.md | 43 ++ research/two-block-signatures/VERIFY.json | 83 ++++ research/two-block-signatures/algebra.py | 70 +++ .../two-block-signatures/audit_mutations.py | 99 ++++ .../two-block-signatures/binary_oracle.py | 42 ++ research/two-block-signatures/census_check.py | 122 +++++ .../construction_check.py | 143 ++++++ research/two-block-signatures/counts.py | 40 ++ research/two-block-signatures/label_check.py | 93 ++++ .../two-block-signatures/matching_oracle.py | 78 ++++ research/two-block-signatures/signatures.py | 103 +++++ research/two-block-signatures/tariffs.py | 87 ++++ .../two-block-signatures/ternary_oracle.py | 106 +++++ research/two-block-signatures/verify.py | 56 +++ 23 files changed, 2329 insertions(+) create mode 100644 research/two-block-signatures/COUNTING.md create mode 100644 research/two-block-signatures/OVERLAP.json create mode 100644 research/two-block-signatures/PRICE-CERTIFICATES.json create mode 100644 research/two-block-signatures/PROOF.md create mode 100644 research/two-block-signatures/README.md create mode 100644 research/two-block-signatures/RESULT.json create mode 100644 research/two-block-signatures/SIX-PORTS.json create mode 100644 research/two-block-signatures/SOURCES.json create mode 100644 research/two-block-signatures/TASK.json create mode 100644 research/two-block-signatures/VALIDATION.md create mode 100644 research/two-block-signatures/VERIFY.json create mode 100644 research/two-block-signatures/algebra.py create mode 100644 research/two-block-signatures/audit_mutations.py create mode 100644 research/two-block-signatures/binary_oracle.py create mode 100644 research/two-block-signatures/census_check.py create mode 100644 research/two-block-signatures/construction_check.py create mode 100644 research/two-block-signatures/counts.py create mode 100644 research/two-block-signatures/label_check.py create mode 100644 research/two-block-signatures/matching_oracle.py create mode 100644 research/two-block-signatures/signatures.py create mode 100644 research/two-block-signatures/tariffs.py create mode 100644 research/two-block-signatures/ternary_oracle.py create mode 100644 research/two-block-signatures/verify.py diff --git a/research/two-block-signatures/COUNTING.md b/research/two-block-signatures/COUNTING.md new file mode 100644 index 0000000000..f529f47386 --- /dev/null +++ b/research/two-block-signatures/COUNTING.md @@ -0,0 +1,41 @@ +# Exact labeled counts and the size of the binary exception + +Let $L,R$ count messages of types $(AA,AM,MA)$ and $(BB,BM,MB)$ respectively, and let $n=p+q$. Once $L,R$ positions are selected, the rest are $MM$. Write $T(n,L,R)=\binom nL\binom{n-L}R$ and $H(k)=3^k-2\cdot2^k+1$. The latter counts length-$k$ words on three letters using both specified nondefault letters. The classification in [PROOF.md](PROOF.md) gives the following $O(pq)$ formula in arithmetic operations for the number $G_{p,q}$ of ordinary signatures. +$$ +G_{p,q}=\sum_{L=0}^p\sum_{R=0}^q T(n,L,R)\,B_{L,R}. +$$ + +| Occupancy | $B_{L,R}$ | +| --- | --- | +| $L0$, with $n=p+q$. Column $j$ of $P$ determines the source blocks of message $j$. Row $j$ of $P^{-1}$ determines its reader blocks. The message labels stay fixed. Write $M$ for the two-block mask and abbreviate a pair of masks by two letters in source, reader order. This is the interface of Gonzalo Mier's #3990/#3997 and Nick Petalas's #6691. The question in #6691 asks for two blocks of three ports. [#3997](https://github.com/CrocSwap/integer-mult-bounds/pull/3997) · [#6691](https://github.com/CrocSwap/integer-mult-bounds/pull/6691) + +Use the seven counts $(a,s,t,b,f,g,h)$ in order +$$ +(AA,AM,MA,BB,BM,MB,MM). +$$ +All other mask pairs are forbidden. Define +$$ +u=p-a-s-t,\qquad v=q-b-f-g . +$$ +The **ordinary conditions** are that $u,v\ge0$ and +$$ +(p-a-t=0)\ \Longleftrightarrow\ (q-b-f=0),\qquad +(q-b-g=0)\ \Longleftrightarrow\ (p-a-s=0). +$$ +The counts sum to $n$, so $u+v=h$. + +**Theorem.** Over every field with more than two elements the ordinary conditions are necessary and sufficient. Over $\mathbb F_2$ they remain necessary. They suffice there unless $u,v$ are both odd and at least one equals one. In those cases the following additional test is exact. + +| Free pivot counts | Additional condition over $\mathbb F_2$ | +| --- | --- | +| $u=1,\ v>1$ odd | $s+t>0$ | +| $v=1,\ u>1$ odd | $f+g>0$ | +| $u=v=1$ | $(s>0\ \mathrm{and}\ g>0)$ or $(t>0\ \mathrm{and}\ f>0)$ | + +Every ordinary signature has an integer witness with entries $0,1,-1$ and a structural support pattern whose generic signature is exactly the requested one. Thus the generic support census equals the realizable rational census in **all two-block dimensions**. The equality concerns the union over all support patterns. A particular matrix and a generic assignment to that very same entry pattern can have different inverse supports. + +For example, the six labels $AM,AM,MA,MA,MM,MM$ have only two exclusively $A$ sources and only two exclusively $A$ readers. Neither individual count reaches three, yet four labels require $A$ pivots. No $3+3$ basis can realize them. This illustrates the joint capacity test that a check of the two counts in isolation misses. + +## 2. Find simultaneous pivots + +Let $W_A,W_B$ be the two complementary row spaces, let $E_X$ be the coordinates $j$ for which $e_j\in W_X$, and let $F_X$ be the coordinates identically zero on $W_X$. The row-space argument in #6691 works for any block sizes. A source omits $X$ exactly on $F_X$. The expansion of $e_j$ in the rows of $P$ has coefficients in row $j$ of $P^{-1}$. Hence its reader is $A$ alone exactly on $E_A$, and $B$ alone exactly on $E_B$. An $AB$ or $BA$ message would put $e_j$ inside a space whose $j$th coordinate is always zero. + +Laplace expansion of $\det P$ along its top $p$ rows supplies a set $I$ of $p$ columns such that the top minor on $I$ and the bottom minor on $J=I^c$ are both invertible. In particular $I$ contains $E_A$ because restriction of $W_A$ to $I$ is injective. It also contains $F_B$ because restriction of $W_B$ to $J$ is surjective. Similarly $J$ contains $E_B\cup F_A$. Thus every $AA,AM,MA$ must go into $I$, and every $BB,BM,MB$ into $J$. The remaining $MM$ coordinates occupy $u$ slots in $I$ and $v$ in $J$. + +Order the columns as $I,J$ and independently change row bases within the two blocks. These invertible operations preserve their row spaces, hence all plane-level masks. The resulting matrix is +$$ +P_0=\begin{pmatrix} I_p&X\\Y&I_q\end{pmatrix}. +$$ +A pivot coordinate in $I$ is in $E_A$ exactly when its row of $X$ is zero. A coordinate of $J$ belongs to $F_A$ exactly when its column of $X$ is zero. Consequently the rows of $X$ that must be nonzero number $p-a-t$, and its required columns number $q-b-f$. For $Y$ the corresponding counts are $q-b-g$ and $p-a-s$. A matrix cannot have an empty set of nonzero rows and a nonempty set of nonzero columns or vice versa. This proves the two equivalences and all the ordinary necessity claims. + +## 3. Construct an ordinary witness + +Choose the required $I,J$ in label order, allocating any $u$ of the $MM$ labels to $I$. Set $X$ to one on the rectangle of its required rows and columns and zero elsewhere. Set $Y$ to a fixed nonzero scalar $c$ on its required rectangle. The ordinary conditions give exactly the prescribed zero rows and columns, including the cases where an entire rectangle is empty. + +Eliminating the bottom-left block gives $\det P_0=\det(I_q-YX)$. Only $MM$ pivots belong to both active rectangles at their respective ends. In particular $YX$ has rank at most one and trace $cuv$. The rank-one determinant identity yields $\det P_0=1-cuv$, in the displayed column order. If $uv$ vanishes in $K$, any nonzero $c$ works. Otherwise exactly one nonzero scalar can fail. Every field larger than $\mathbb F_2$ supplies a choice, and over $\mathbb Q$ the choice $c=-1$ always gives determinant $1+uv>0$. + +Giving every supported entry an independent indeterminate leaves the diagonal matching and a nonzero determinant. The two pivot submatrices remain diagonal, so row normalization preserves exactly the same zero rows and columns of $X,Y$. Thus every constructed ordinary pattern has the requested generic signature. Conversely the necessity proof also applies over the rational-function field of a generic matrix. This proves generic equality without enumerating $2^{n^2}$ structural supports. Structural determinant and cofactor tests by matchings are classical. [Edmonds (1967)](https://nvlpubs.nist.gov/nistpubs/jres/71B/jresv71Bn4p241_A1b.pdf) + +## 4. The complete binary obstruction + +In $\mathbb F_2$ take $c=1$. The construction already works if $uv$ is even. To see exactly what can happen when $uv$ is odd, let $X_0,Y_0$ be the restrictions to the $u$ and $v$ free pivots. For **any** graph matrix with the requested masks, +$$ +\det P_0=\det(I_u-X_0Y_0). +$$ +Indeed, in $I_p-XY$ an $I$-coordinate outside the free set has either a zero row of $X$ or a zero column of $Y$. Its determinant row or column is the corresponding identity row or column and can be deleted with its matching index. A nonfree $J$-coordinate has either a zero column of $X$ or a zero row of $Y$ and contributes nothing to the remaining product. + +Start with both active rectangles filled with ones. Removing one common entry from $X_0$ or $Y_0$ leaves the other core rank one. The product then has trace $uv-1$, even, giving determinant one. The question is whether this deletion preserves the required row and column supports. + +- If $u,v>1$ are odd, both are at least three. Delete any core entry of $X$ and its row and column still have other entries. +- If $u=1,v>1$ are odd and $s>0$, delete one entry of $X_0$. Its column is covered by an $AM$ row and its row still has another free column. If $t>0$, delete one entry of $Y_0$ instead. Its row can use an $MA$ column. If $s=t=0$, the only active $I$ row of $X$ and the only active $I$ column of $Y$ are the single free pivot. Every free $J$ coordinate forces a one in both cores. Their product is the scalar $v=1$ in $\mathbb F_2$. No invertible graph matrix is possible. Swapping the block names gives the $v=1,u>1$ row of the table. +- If $u=v=1$, the determinant is $1-xy$ for the two core bits. Setting $x=0$ is possible exactly when the free row can use an $MB$ column and the free column an $AM$ row, so $g,s>0$. Setting $y=0$ requires an $MA$ column and a $BM$ row, so $t,f>0$. If neither deletion is possible, both bits are forced to one. This proves necessity as well as sufficiency. + +These arguments use only the counts of the signature. Every possible pivot chart has those same counts, so switching pivots cannot evade an obstruction. A field of characteristic two with at least four elements falls under Section 3. + +## 5. Exact prices under monotone support tariffs + +Allow a different price $c_j(S,R)$ for each message. Assume enlarging either mask cannot lower that price. The pivots from Section 2 assign every $I$-message to $A$ and every $J$-message to $B$, and the assigned block belongs to **both** masks. A row-permuted coordinate basis realizes the corresponding pure $AA$ and $BB$ messages. Its price is at most that of the original basis. Every assignment of $p$ labels to $A$ and the remainder to $B$ can itself be realized by such a permutation. + +It follows that the exact minimum on every field is $\sum_j c_j(B,B)$ plus the sum of the $p$ smallest values $c_j(A,A)-c_j(B,B)$. In particular field-specific omissions cannot affect a monotone additive tariff. This statement permits message-dependent prices and concerns square bases. The matched-plane COPY mass bound for overcomplete scalar factorizations is credited separately to #4365. [#4365](https://github.com/CrocSwap/integer-mult-bounds/pull/4365) + +A positive, nonmonotone tariff can distinguish fields. Take $p=q=d\ge2$ and costs $(3,3,3,1,2,2,2)$ in the seven-type order. Writing $L=a+s+t$, its total is $4d+L-b$. If $b=d$ then $E_B$ and $F_A$ both have size $d$ and all remaining messages are $AA$. Otherwise $b\le d-1$. The ordinary minimum is therefore $3d+1$, attained at $L=0,\ b=d-1$. At that equality, an additional $BM$ would saturate $F_A$ and force $E_A$ to have dimension $d$, and an additional $MB$ would saturate $E_B$ and force $F_B$ to have size $d$. Both contradict $L=0$. The sole optimal profile consists of $d-1$ copies of $BB$ and $d+1$ copies of $MM$. + +Its free sizes are $(u,v)=(d,1)$. It is binary-realizable when $d$ is even and forbidden when $d$ is odd. For odd $d\ge3$, take $d-2$ copies of $BB$ and $d+2$ copies of $MM$. The free sizes $(d,2)$ have even product and this binary witness costs $3d+2$. Integrality excludes a price strictly between the two. At $d=3$ the two minima are ten and eleven. These prices exhibit a mathematical separation and are not measured decoder costs. + +One zero-one witness for the six-port optimum $BB,BB,MM,MM,MM,MM$ is +$$ +\begin{pmatrix} +0&0&1&0&0&1\\0&0&0&1&0&1\\0&0&0&0&1&1\\ +1&0&0&0&0&0\\0&1&0&0&0&0\\0&0&1&1&1&1 +\end{pmatrix}. +$$ +Its determinant is $-2$, so it works over the rationals and the three-element field. In the two-element field the theorem rules out **every** witness for that signature, in addition to the singularity of this particular matrix. + +## 6. Scope and reproducible counts + +For $p=q=3$ the ordinary conditions give 188 count profiles and 33,727 labeled signatures. Binary feasibility leaves 167 profiles and 30,547 labeled signatures. Of the 3,180 excluded codes, 3,150 have a $1$-by-$1$ free core and 15 each have the two one-sided odd obstructions. Each profile represents $6!/\prod_i n_i!$ labelings. Exhaustive matching and finite-field incidence counts, actual matrices, exact inverse checks and prices are described in [VALIDATION.md](VALIDATION.md). + +[COUNTING.md](COUNTING.md) sums the pivot categories in $O(pq)$ arithmetic operations, gives the exact size of each exception family, and derives the asymptotic binary deficit. For the six-port case, [PRICE-CERTIFICATES.json](PRICE-CERTIFICATES.json) separates 12 of the 21 missing profiles strictly below all binary profiles under a positive integral additive tariff. The other nine are exact convex combinations of binary profiles and hence cannot beat every binary choice under any linear tariff. A separating price need not make its specified profile the unique ordinary optimum. + +The row-space description, four-port constraints and four-port rational census are predecessor results. This package supplies the arbitrary two-block classification, uniform larger-field construction, exact binary exceptions and tariff consequences. Three or more blocks, the full port-level joint zero pattern of $P,P^{-1}$ and physical supplier invoices fall outside the theorem. diff --git a/research/two-block-signatures/README.md b/research/two-block-signatures/README.md new file mode 100644 index 0000000000..e1f8b4f9b3 --- /dev/null +++ b/research/two-block-signatures/README.md @@ -0,0 +1,44 @@ +# Which source and reader masks can two port blocks realize? + +This answers open question 1 of Nick Petalas's #6691. For two blocks of three ports, an invertible basis realizes **33,727 labeled source/reader signatures over the rationals**, exactly the generic support census. Over the two-element field it realizes **30,547**. The classification holds for arbitrary positive block sizes and every field. [Four-port handoff](https://github.com/CrocSwap/integer-mult-bounds/pull/6691) + +A signature records which blocks a message uses on input and which blocks read it on output. The input masks come from the corresponding column of the basis matrix and the output masks from the corresponding row of its inverse. A generic support pattern gives each allowed matrix entry its own independent coefficient. The original six-port search would have had 2^36 port-level supports. + +| Two blocks of three ports | Up to relabeling messages | Labeled signatures | +| --- | ---: | ---: | +| Rational, generic or any field with more than two elements | 188 | 33,727 | +| Two-element field | 167 | 30,547 | +| Difference | 21 | 3,180 | + +## What determines a signature + +A nonzero determinant supplies simultaneous pivots for both blocks. After row-basis changes inside each block, the matrix consists of two identity diagonal blocks and two rectangular off-diagonal blocks. Six exclusive message types force the side on which they pivot. Messages using both blocks on input and output fill the leftover positions. The row and column support requirements then give an exact test and a direct witness with entries 0, 1 and −1 over the rationals. A small parity obstruction accounts for the entire binary deficit. Fields of characteristic two with more than two elements realize the full ordinary set. [Classification and proof](PROOF.md) + +The labeled counts take quadratic arithmetic time in the balanced dimension. In balanced size d+d, the proportion of ordinary signatures missing over the two-element field is asymptotic to d^(3/2) (16/49)^d / (4√π). [Counting formula](COUNTING.md) + +## Why the tariff matters + +If a message's price cannot decrease when either mask grows, its exact minimum over all invertible bases is attained by assigning messages to individual blocks with a coordinate permutation. This even permits different prices for different messages. The result concerns square bases. The earlier sharp matched-plane COPY bound also allows overcomplete scalar factorizations. [Tariff proof](PROOF.md#5-exact-prices-under-monotone-support-tariffs) · [#4365](https://github.com/CrocSwap/integer-mult-bounds/pull/4365) + +Under a positive **nonmonotone** tariff, fields can differ. The same seven prices give minima 10 and 11 in the six-port rational and binary cases, respectively. Among the 21 missing profiles, 12 can be priced strictly below every binary choice. The other nine are convex combinations of binary profiles. These are exact example tariffs. A physical decoder would need its own measured or proved prices. [Price certificates](PRICE-CERTIFICATES.json) + +## Reproduce + +Run the registered replay from the repository root with CPython 3.12 and its standard library. + +```sh +python3.12 -B scripts/research_package.py --package research/two-block-signatures +``` + +[SIX-PORTS.json](SIX-PORTS.json) contains a rational matrix for each of the 188 profiles, a binary matrix where one exists, and the exact number of ordered complementary pairs over the two- and three-element fields for each **single labeling**. The matrix strings use `+` for one, `-` for minus one and `.` for zero. The symbol order is AA, AM, MA, BB, BM, MB, MM. Permuting the columns relabels a witness. [RESULT.json](RESULT.json) and [VALIDATION.md](VALIDATION.md) give the counts and the independent replay commands. + +## Source, scope and credit + +Gonzalo Mier supplied the original binary-coefficient and generic four-port screens in #3990/#3997. Nick Petalas supplied the complementary-space interpretation, four-port classification and six-port handoff in #6691. #4365 supplies the earlier overcomplete matched-plane result. Classical determinant/cofactor matchings and coordinate incidence retain their usual credit. Source blobs from the pending handoff are retained with their original author, path and Git identity. [Source identities](SOURCES.json) · [Scope and overlap](OVERLAP.json) + +The revision-8 `coverage-law-change` card changes scope to the exact attainable signatures of this decoder interface. The selected source-binding orientation passed. Native delivery, completeness of a physical caller and a new multiplication exponent are outside this result. New work prepared for SHIN09-git with substantial OpenAI Codex assistance in derivation, implementation, verification and writing. Apache-2.0. + +## Open next questions + +1. For three blocks of two ports, can a special cancellation produce a signature absent from the generic census? A reader coordinate can lie in the sum of the other two row spaces, so the present opposite-space test does not decide it. +2. Is there an exact field-order formula for the number of bases with an individual signature? Begin with the stored two- and three-element multiplicities. Feasibility alone does not determine those numbers. diff --git a/research/two-block-signatures/RESULT.json b/research/two-block-signatures/RESULT.json new file mode 100644 index 0000000000..58284c47bc --- /dev/null +++ b/research/two-block-signatures/RESULT.json @@ -0,0 +1,429 @@ +{ + "censuses": { + "all_mixed_six_port_pairs": [ + 64560, + 309983240 + ], + "binary": { + "1+1": { + "code_sha256": "b37d0d8914bf3037f8ead900ca1f68a4d999c135fe8a873487c8fff988c66f6f", + "codes": 6, + "first_spaces": 3, + "pairs": 6, + "second_spaces": 3 + }, + "1+2": { + "code_sha256": "2198b261b743c99114681cfe5bebc31f31a41ea3f4b2aa9a89cdd6ab6147364b", + "codes": 28, + "first_spaces": 7, + "pairs": 28, + "second_spaces": 7 + }, + "1+3": { + "code_sha256": "952d8fda1c0e5788aeae74b1a26c18421efccf4b9a64db9b720c476bd9cb2d34", + "codes": 120, + "first_spaces": 15, + "pairs": 120, + "second_spaces": 15 + }, + "1+4": { + "code_sha256": "eed96f50c53e517801956dc406c808f42555da0f8c9eb5f0f460801e18b339af", + "codes": 496, + "first_spaces": 31, + "pairs": 496, + "second_spaces": 31 + }, + "1+5": { + "code_sha256": "dcfc446104f229744393a57528a37f8ca6b00b1c32dfe085679a48382114fd0b", + "codes": 2016, + "first_spaces": 63, + "pairs": 2016, + "second_spaces": 63 + }, + "2+1": { + "code_sha256": "8a3676ae21346c942006dd5a86609f60decba1b2115d737fcda96cd70a5b83a4", + "codes": 28, + "first_spaces": 7, + "pairs": 28, + "second_spaces": 7 + }, + "2+2": { + "code_sha256": "4b056b833330cf93333cdf590156cd68db7f6c3ab7d6ea462bb1fce2883e0779", + "codes": 355, + "first_spaces": 35, + "pairs": 560, + "second_spaces": 35 + }, + "2+3": { + "code_sha256": "36bb5746dca0273f60e605df057262415117be2a328f5582b841d3df020573dd", + "codes": 2846, + "first_spaces": 155, + "pairs": 9920, + "second_spaces": 155 + }, + "2+4": { + "code_sha256": "8313650a02b8884ee37f2055e0b7f2e90acefa9d086477c11eebe481da6a6dfe", + "codes": 18157, + "first_spaces": 651, + "pairs": 166656, + "second_spaces": 651 + }, + "3+1": { + "code_sha256": "88af3c806de784b2c7b1fbf7cfcc7ab4750ca7bd9c5756f80f44d6f300ea7d62", + "codes": 120, + "first_spaces": 15, + "pairs": 120, + "second_spaces": 15 + }, + "3+2": { + "code_sha256": "9df416ab10c6c1d308d73695a9ff368ff7d90b495a7ecb30361f1c2b82320f93", + "codes": 2846, + "first_spaces": 155, + "pairs": 9920, + "second_spaces": 155 + }, + "3+3": { + "code_sha256": "a1e14852a53a581c2577f2eb77112e8161e135473c78d86c63872c7ca7dc3e29", + "codes": 30547, + "first_spaces": 1395, + "pairs": 714240, + "second_spaces": 1395 + }, + "4+1": { + "code_sha256": "26910e24815914d4063e6dde28b22eb7ec129df23fe0d6b6e823a3cebb6aba8d", + "codes": 496, + "first_spaces": 31, + "pairs": 496, + "second_spaces": 31 + }, + "4+2": { + "code_sha256": "bfd957f2033862ef54826a14452ad8dcc9dcec3f5b8e74d8a9ce00a90274bede", + "codes": 18157, + "first_spaces": 651, + "pairs": 166656, + "second_spaces": 651 + }, + "5+1": { + "code_sha256": "5b357d46a8f2767acdee02845ecb4fb801e8d3ffaec2a541a228dfc047ed97db", + "codes": 2016, + "first_spaces": 63, + "pairs": 2016, + "second_spaces": 63 + } + }, + "generic": { + "1+5": { + "chart": true, + "classes": 56, + "fixed_order_codes": 1024, + "labeled_codes": 3367, + "nonsingular": 1024, + "patterns": 1024, + "variables": 10 + }, + "2+2": { + "chart": false, + "classes": 34, + "fixed_order_codes": 439, + "labeled_codes": 439, + "nonsingular": 37823, + "patterns": 65536, + "variables": 16 + }, + "2+4": { + "chart": true, + "classes": 147, + "fixed_order_codes": 2116, + "labeled_codes": 20827, + "nonsingular": 65536, + "patterns": 65536, + "variables": 16 + }, + "3+3": { + "chart": true, + "classes": 188, + "fixed_order_codes": 2500, + "labeled_codes": 33727, + "nonsingular": 262144, + "patterns": 262144, + "variables": 18 + } + }, + "literal_GL4_F2": 20160, + "ternary": { + "2+2": { + "classes": 34, + "first_space_orbits": 7, + "orbit_size_histogram": { + "6": 1, + "8": 1, + "12": 1, + "16": 2, + "24": 1, + "48": 1 + }, + "ordered_pairs": 10530, + "spaces": 130 + }, + "3+3": { + "classes": 188, + "first_space_orbits": 31, + "orbit_size_histogram": { + "20": 1, + "120": 3, + "180": 1, + "240": 4, + "320": 2, + "360": 1, + "480": 2, + "640": 1, + "960": 5, + "1440": 6, + "1920": 2, + "2880": 1, + "3840": 1, + "5760": 1 + }, + "ordered_pairs": 666860040, + "spaces": 33880 + } + } + }, + "construction": { + "closed_counts": { + "balanced": { + "16": { + "binary": 750741788882855027930788183, + "excluded": { + "binary 1x1": 167421595863287358720, + "binary one A": 3682520346137787360, + "binary one B": 3682520346137787360 + }, + "ordinary": 750741963669491583493721623 + }, + "3": { + "binary": 30547, + "excluded": { + "binary 1x1": 3150, + "binary one A": 15, + "binary one B": 15 + }, + "ordinary": 33727 + }, + "32": { + "binary": 974405693443100613225887281557957607866855166873922455, + "excluded": { + "binary 1x1": 8655481941118601940106363430192105100288, + "binary one A": 64973607567736713550764568314223610304, + "binary one B": 64973607567736713550764568314223610304 + }, + "ordinary": 974405693443109398655043535633324815759421987426243351 + }, + "8": { + "binary": 18893444657911, + "excluded": { + "binary 1x1": 15086111040, + "binary one A": 376524720, + "binary one B": 376524720 + }, + "ordinary": 18909283818391 + } + }, + "exact_profile_grids": 78 + }, + "four_port_control": { + "F2": 355, + "actual_signed_witnesses": 439, + "rational_zero_one_predecessor": 391 + }, + "grids": { + "1+1": { + "binary_profiles": 3, + "binary_signatures": 6, + "field_witnesses": 15, + "profiles": 4, + "signatures": 7 + }, + "1+2": { + "binary_profiles": 7, + "binary_signatures": 28, + "field_witnesses": 37, + "profiles": 10, + "signatures": 37 + }, + "1+3": { + "binary_profiles": 13, + "binary_signatures": 120, + "field_witnesses": 73, + "profiles": 20, + "signatures": 175 + }, + "1+4": { + "binary_profiles": 22, + "binary_signatures": 496, + "field_witnesses": 127, + "profiles": 35, + "signatures": 781 + }, + "1+5": { + "binary_profiles": 34, + "binary_signatures": 2016, + "field_witnesses": 202, + "profiles": 56, + "signatures": 3367 + }, + "2+1": { + "binary_profiles": 7, + "binary_signatures": 28, + "field_witnesses": 37, + "profiles": 10, + "signatures": 37 + }, + "2+2": { + "binary_profiles": 27, + "binary_signatures": 355, + "field_witnesses": 129, + "profiles": 34, + "signatures": 439 + }, + "2+3": { + "binary_profiles": 65, + "binary_signatures": 2846, + "field_witnesses": 299, + "profiles": 78, + "signatures": 3361 + }, + "2+4": { + "binary_profiles": 126, + "binary_signatures": 18157, + "field_witnesses": 567, + "profiles": 147, + "signatures": 20827 + }, + "3+1": { + "binary_profiles": 13, + "binary_signatures": 120, + "field_witnesses": 73, + "profiles": 20, + "signatures": 175 + }, + "3+2": { + "binary_profiles": 65, + "binary_signatures": 2846, + "field_witnesses": 299, + "profiles": 78, + "signatures": 3361 + }, + "3+3": { + "binary_profiles": 167, + "binary_signatures": 30547, + "field_witnesses": 731, + "profiles": 188, + "signatures": 33727 + }, + "4+1": { + "binary_profiles": 22, + "binary_signatures": 496, + "field_witnesses": 127, + "profiles": 35, + "signatures": 781 + }, + "4+2": { + "binary_profiles": 126, + "binary_signatures": 18157, + "field_witnesses": 567, + "profiles": 147, + "signatures": 20827 + }, + "5+1": { + "binary_profiles": 34, + "binary_signatures": 2016, + "field_witnesses": 202, + "profiles": 56, + "signatures": 3367 + } + }, + "invalid_cases": 8, + "monotone_prices": [ + 26, + 47, + 47, + 43, + 58, + 46, + 33, + 41, + 31, + 35, + 47, + 41 + ], + "parity_tariffs": [ + [ + 2, + 7, + 7 + ], + [ + 3, + 10, + 11 + ], + [ + 4, + 13, + 13 + ], + [ + 5, + 16, + 17 + ], + [ + 6, + 19, + 19 + ], + [ + 7, + 22, + 23 + ], + [ + 8, + 25, + 25 + ] + ], + "tariff_certificates": { + "in_binary_convex_hull": 9, + "separated": 12 + }, + "zero_one_example": { + "code": 16777130, + "matrix": [ + "..+..+", + "...+.+", + "....++", + "+.....", + ".+....", + "..++++" + ], + "price": 10 + } + }, + "labeled_witnesses": { + "F2": 30547, + "F3": 33727, + "rational": 33727, + "rational_abs_determinants": { + "1": 22620, + "2": 7290, + "3": 3240, + "4": 270, + "5": 270, + "7": 36, + "10": 1 + } + } +} diff --git a/research/two-block-signatures/SIX-PORTS.json b/research/two-block-signatures/SIX-PORTS.json new file mode 100644 index 0000000000..ffa3fc58ab --- /dev/null +++ b/research/two-block-signatures/SIX-PORTS.json @@ -0,0 +1,190 @@ +[ + {"counts":[0,0,0,0,0,0,6],"multiplicity":1,"rational":["+..+++",".+.+++","..++++","---+..","---.+.","---..+"],"binary":["+...++",".+.+++","..++++","++++..","+++.+.","+++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[64560,309983240]}, + {"counts":[0,0,0,0,0,1,5],"multiplicity":6,"rational":["++..++","+.+.++","+..+++","+.....",".---+.",".---.+"],"binary":["++..++","+.+.++","+..+++","+.....",".++++.",".+++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[5470,8771840]}, + {"counts":[0,0,0,0,0,2,4],"multiplicity":15,"rational":["+++..+","++.+.+","++..++","+.....",".+....","..---+"],"binary":["+++...","++.+.+","++..++","+.....",".+....","..++++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[160,112288]}, + {"counts":[0,0,0,0,1,0,5],"multiplicity":6,"rational":[".+..++","..+.++","...+++","+---..",".---+.",".---.+"],"binary":[".+..++","..+.++","...+++","++++..",".++++.",".+++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[5470,8771840]}, + {"counts":[0,0,0,0,1,1,4],"multiplicity":30,"rational":[".++..+",".+.+.+",".+..++","+.---.",".+....","..---+"],"binary":[".++...",".+.+.+",".+..++","+.+++.",".+....","..++++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[576,271264]}, + {"counts":[0,0,0,0,1,2,3],"multiplicity":60,"rational":[".+++..",".++.+.",".++..+","+..---",".+....","..+..."],"binary":[".+++..",".++.+.",".++..+","+..+++",".+....","..+..."],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,3968]}, + {"counts":[0,0,0,0,2,0,4],"multiplicity":15,"rational":["..+..+","...+.+","....++","+.---.",".+---.","..---+"],"binary":["..+..+","...+.+","....++","+.+++.",".++++.","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[160,112288]}, + {"counts":[0,0,0,0,2,1,3],"multiplicity":60,"rational":["..++..","..+.+.","..+..+","+..---",".+.---","..+..."],"binary":["..++..","..+.+.","..+..+","+..+++",".+.+++","..+..."],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,3968]}, + {"counts":[0,0,0,1,0,0,5],"multiplicity":6,"rational":[".+..++","..+.++","...+++","+.....",".---+.",".---.+"],"binary":[".+..++","..+.++","...+++","+.....",".++++.",".+++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[430,241120]}, + {"counts":[0,0,0,1,0,1,4],"multiplicity":30,"rational":[".++..+",".+.+.+",".+..++","+.....",".+....","..---+"],"binary":[".++...",".+.+.+",".+..++","+.....",".+....","..++++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,3344]}, + {"counts":[0,0,0,1,1,0,4],"multiplicity":30,"rational":["..+..+","...+.+","....++","+.....",".+---.","..---+"],"binary":["..+..+","...+.+","....++","+.....",".++++.","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,3344]}, + {"counts":[0,0,0,1,1,1,3],"multiplicity":120,"rational":["..++..","..+.+.","..+..+","+.....",".+.---","..+..."],"binary":["..++..","..+.+.","..+..+","+.....",".+.+++","..+..."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,64]}, + {"counts":[0,0,0,2,0,0,4],"multiplicity":15,"rational":["..+..+","...+.+","....++","+.....",".+....","..---+"],"binary":null,"binary_verdict":"binary one B","pairs_per_label_F2_F3":[0,40]}, + {"counts":[0,0,1,0,0,0,5],"multiplicity":6,"rational":["+.....",".+.+++","..++++","---+..","---.+.","---..+"],"binary":["+.....",".+.+++","..++++","++++..","+++.+.","+++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[5470,8771840]}, + {"counts":[0,0,1,0,0,1,4],"multiplicity":30,"rational":["+.....",".++.++",".+.+++",".+....","-.--+.","-.--.+"],"binary":["+.....",".++.++",".+.+++",".+....","+.+++.","+.++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[414,242304]}, + {"counts":[0,0,1,0,0,2,3],"multiplicity":60,"rational":["+.....",".+++.+",".++.++",".+....","..+...","-..--+"],"binary":["+.....",".+++.+",".++.++",".+....","..+...","+..+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[9,2976]}, + {"counts":[0,0,1,0,1,0,4],"multiplicity":30,"rational":["+.....","..+.++","...+++","-+--..","-.--+.","-.--.+"],"binary":["+.....","..+.++","...+++","++++..","+.+++.","+.++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1554,960648]}, + {"counts":[0,0,1,0,1,1,3],"multiplicity":120,"rational":["+.....","..++.+","..+.++","-+.--.","..+...","-..--+"],"binary":["+.....","..++.+","..+.++","++.++.","..+...","+..+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[147,29040]}, + {"counts":[0,0,1,0,1,2,2],"multiplicity":180,"rational":["+.....","..+++.","..++.+","-+..--","..+...","...+.."],"binary":["+.....","..+++.","..++.+","++..++","..+...","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,448]}, + {"counts":[0,0,1,0,2,0,3],"multiplicity":60,"rational":["+.....","...+.+","....++","-+.--.","-.+--.","-..--+"],"binary":["+.....","...+.+","....++","++.++.","+.+++.","+..+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[185,58128]}, + {"counts":[0,0,1,0,2,1,2],"multiplicity":180,"rational":["+.....","...++.","...+.+","-+..--","-.+.--","...+.."],"binary":["+.....","...++.","...+.+","++..++","+.+.++","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,1984]}, + {"counts":[0,0,1,1,0,0,4],"multiplicity":30,"rational":["+.....","..+.++","...+++",".+....","-.--+.","-.--.+"],"binary":["+.....","..+.++","...+++",".+....","+.+++.","+.++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[114,25824]}, + {"counts":[0,0,1,1,0,1,3],"multiplicity":120,"rational":["+.....","..++.+","..+.++",".+....","..+...","-..--+"],"binary":["+.....","..++.+","..+.++",".+....","..+...","+..+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[3,336]}, + {"counts":[0,0,1,1,1,0,3],"multiplicity":120,"rational":["+.....","...+.+","....++",".+....","-.+--.","-..--+"],"binary":["+.....","...+.+","....++",".+....","+.+++.","+..+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[17,1704]}, + {"counts":[0,0,1,1,1,1,2],"multiplicity":360,"rational":["+.....","...++.","...+.+",".+....","-.+.--","...+.."],"binary":["+.....","...++.","...+.+",".+....","+.+.++","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,32]}, + {"counts":[0,0,1,2,0,0,3],"multiplicity":60,"rational":["+.....","...+.+","....++",".+....","..+...","-..--+"],"binary":["+.....","...+.+","....++",".+....","..+...","+..+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,24]}, + {"counts":[0,0,2,0,0,0,4],"multiplicity":15,"rational":["+.....",".+....","..++++","---+..","---.+.","---..+"],"binary":["+.....",".+....","..++++","++.+..","+++.+.","+++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[160,112288]}, + {"counts":[0,0,2,0,0,1,3],"multiplicity":60,"rational":["+.....",".+....","..++++","..+...","--.-+.","--.-.+"],"binary":["+.....",".+....","..++++","..+...","++.++.","++.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[9,2976]}, + {"counts":[0,0,2,0,0,2,2],"multiplicity":90,"rational":["+.....",".+....","..++++","..+...","...+..","--..-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,32]}, + {"counts":[0,0,2,0,1,0,3],"multiplicity":60,"rational":["+.....",".+....","...+++","--+-..","--.-+.","--.-.+"],"binary":["+.....",".+....","...+++","++++..","++.++.","++.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[185,58128]}, + {"counts":[0,0,2,0,1,1,2],"multiplicity":180,"rational":["+.....",".+....","...+++","--+.-.","...+..","--..-+"],"binary":["+.....",".+....","...+++","+++.+.","...+..","++...+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,1712]}, + {"counts":[0,0,2,0,1,2,1],"multiplicity":180,"rational":["+.....",".+....","...+++","--+..-","...+..","....+."],"binary":["+.....",".+....","...+++","+++..+","...+..","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,32]}, + {"counts":[0,0,2,0,2,0,2],"multiplicity":90,"rational":["+.....",".+....","....++","--+.-.","--.+-.","--..-+"],"binary":["+.....",".+....","....++","+++.+.","++.++.","++...+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[208,30032]}, + {"counts":[0,0,2,0,2,1,1],"multiplicity":180,"rational":["+.....",".+....","....++","--+..-","--.+.-","....+."],"binary":["+.....",".+....","....++","+++..+","++.+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,992]}, + {"counts":[0,0,2,1,0,0,3],"multiplicity":60,"rational":["+.....",".+....","...+++","..+...","--.-+.","--.-.+"],"binary":["+.....",".+....","...+++","..+...","++.++.","++.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[9,1488]}, + {"counts":[0,0,2,1,0,1,2],"multiplicity":180,"rational":["+.....",".+....","...+++","..+...","...+..","--..-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,16]}, + {"counts":[0,0,2,1,1,0,2],"multiplicity":180,"rational":["+.....",".+....","....++","..+...","--.+-.","--..-+"],"binary":["+.....",".+....","....++","..+...","++.++.","++...+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,856]}, + {"counts":[0,0,2,1,1,1,1],"multiplicity":360,"rational":["+.....",".+....","....++","..+...","--.+.-","....+."],"binary":["+.....",".+....","....++","..+...","++.+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[0,0,2,2,0,0,2],"multiplicity":90,"rational":["+.....",".+....","....++","..+...","...+..","--..-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,8]}, + {"counts":[0,0,3,0,3,0,0],"multiplicity":20,"rational":["+.....",".+....","..+...","---+..","---.+.","---..+"],"binary":["+.....",".+....","..+...","++++..","+++.+.","+++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[265,16064]}, + {"counts":[0,0,3,1,2,0,0],"multiplicity":60,"rational":["+.....",".+....","..+...","...+..","---.+.","---..+"],"binary":["+.....",".+....","..+...","...+..","+++.+.","+++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,496]}, + {"counts":[0,0,3,2,1,0,0],"multiplicity":60,"rational":["+.....",".+....","..+...","...+..","....+.","---..+"],"binary":["+.....",".+....","..+...","...+..","....+.","+++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[0,1,0,0,0,0,5],"multiplicity":6,"rational":["+..+++",".+.+++","..++++",".--+..",".--.+.",".--..+"],"binary":["+..+++",".+.+++","..++++",".+++..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[5470,8771840]}, + {"counts":[0,1,0,0,0,1,4],"multiplicity":30,"rational":["++..++",".++.++",".+.+++",".+....","..--+.","..--.+"],"binary":["++..++",".++.++",".+.+++",".+....","..+++.","..++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1554,960648]}, + {"counts":[0,1,0,0,0,2,3],"multiplicity":60,"rational":["+++..+",".+++.+",".++.++",".+....","..+...","...--+"],"binary":["+++..+",".+++.+",".++.++",".+....","..+...","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[185,58128]}, + {"counts":[0,1,0,0,1,0,4],"multiplicity":30,"rational":["+...++","..+.++","...+++",".+--..","..--+.","..--.+"],"binary":["+...++","..+.++","...+++",".+++..","..+++.","..++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[414,242304]}, + {"counts":[0,1,0,0,1,1,3],"multiplicity":120,"rational":["+.+..+","..++.+","..+.++",".+.--.","..+...","...--+"],"binary":["+.+..+","..++.+","..+.++",".+.++.","..+...","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[147,29040]}, + {"counts":[0,1,0,0,1,2,2],"multiplicity":180,"rational":["+.++..","..+++.","..++.+",".+..--","..+...","...+.."],"binary":["+.++..","..+++.","..++.+",".+..++","..+...","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,1984]}, + {"counts":[0,1,0,0,2,0,3],"multiplicity":60,"rational":["+....+","...+.+","....++",".+.--.","..+--.","...--+"],"binary":["+....+","...+.+","....++",".+.++.","..+++.","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[9,2976]}, + {"counts":[0,1,0,0,2,1,2],"multiplicity":180,"rational":["+..+..","...++.","...+.+",".+..--","..+.--","...+.."],"binary":["+..+..","...++.","...+.+",".+..++","..+.++","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,448]}, + {"counts":[0,1,0,1,0,0,4],"multiplicity":30,"rational":["+...++","..+.++","...+++",".+....","..--+.","..--.+"],"binary":["+...++","..+.++","...+++",".+....","..+++.","..++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[114,25824]}, + {"counts":[0,1,0,1,0,1,3],"multiplicity":120,"rational":["+.+..+","..++.+","..+.++",".+....","..+...","...--+"],"binary":["+.+..+","..++.+","..+.++",".+....","..+...","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[17,1704]}, + {"counts":[0,1,0,1,1,0,3],"multiplicity":120,"rational":["+....+","...+.+","....++",".+....","..+--.","...--+"],"binary":["+....+","...+.+","....++",".+....","..+++.","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[3,336]}, + {"counts":[0,1,0,1,1,1,2],"multiplicity":360,"rational":["+..+..","...++.","...+.+",".+....","..+.--","...+.."],"binary":["+..+..","...++.","...+.+",".+....","..+.++","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,32]}, + {"counts":[0,1,0,2,0,0,3],"multiplicity":60,"rational":["+....+","...+.+","....++",".+....","..+...","...--+"],"binary":["+....+","...+.+","....++",".+....","..+...","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,24]}, + {"counts":[0,1,1,0,0,0,4],"multiplicity":30,"rational":["+..+++",".+....","..++++",".--+..",".--.+.",".--..+"],"binary":["+..+++",".+....","..+.++",".+++..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[576,271264]}, + {"counts":[0,1,1,0,0,1,3],"multiplicity":120,"rational":["+.+.++",".+....","..++++","..+...",".-.-+.",".-.-.+"],"binary":["+.+.++",".+....","..++++","..+...",".+.++.",".+.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[147,29040]}, + {"counts":[0,1,1,0,0,2,2],"multiplicity":180,"rational":["+.++.+",".+....","..++++","..+...","...+..",".-..-+"],"binary":["+.++.+",".+....","..+++.","..+...","...+..",".+..++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,1712]}, + {"counts":[0,1,1,0,1,0,3],"multiplicity":120,"rational":["+...++",".+....","...+++",".-+-..",".-.-+.",".-.-.+"],"binary":["+...++",".+....","...+++",".+++..",".+.++.",".+.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[147,29040]}, + {"counts":[0,1,1,0,1,1,2],"multiplicity":360,"rational":["+..+.+",".+....","...+++",".-+.-.","...+..",".-..-+"],"binary":["+..+.+",".+....","...++.",".++.+.","...+..",".+..++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[48,3368]}, + {"counts":[0,1,1,0,1,2,1],"multiplicity":360,"rational":["+..++.",".+....","...+++",".-+..-","...+..","....+."],"binary":["+..++.",".+....","...+++",".++..+","...+..","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,224]}, + {"counts":[0,1,1,0,2,0,2],"multiplicity":180,"rational":["+....+",".+....","....++",".-+.-.",".-.+-.",".-..-+"],"binary":["+....+",".+....","....++",".++.+.",".+.++.",".+...+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,1712]}, + {"counts":[0,1,1,0,2,1,1],"multiplicity":360,"rational":["+...+.",".+....","....++",".-+..-",".-.+.-","....+."],"binary":["+...+.",".+....","....++",".++..+",".+.+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,224]}, + {"counts":[0,1,1,1,0,0,3],"multiplicity":120,"rational":["+...++",".+....","...+++","..+...",".-.-+.",".-.-.+"],"binary":["+...++",".+....","...+++","..+...",".+.++.",".+.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[33,3000]}, + {"counts":[0,1,1,1,0,1,2],"multiplicity":360,"rational":["+..+.+",".+....","...+++","..+...","...+..",".-..-+"],"binary":["+..+.+",".+....","...++.","..+...","...+..",".+..++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[4,184]}, + {"counts":[0,1,1,1,1,0,2],"multiplicity":360,"rational":["+....+",".+....","....++","..+...",".-.+-.",".-..-+"],"binary":["+....+",".+....","....++","..+...",".+.++.",".+...+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[4,184]}, + {"counts":[0,1,1,1,1,1,1],"multiplicity":720,"rational":["+...+.",".+....","....++","..+...",".-.+.-","....+."],"binary":["+...+.",".+....","....++","..+...",".+.+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[0,1,1,2,0,0,2],"multiplicity":180,"rational":["+....+",".+....","....++","..+...","...+..",".-..-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,8]}, + {"counts":[0,1,2,0,0,0,3],"multiplicity":60,"rational":["+..+++",".+....","..+...",".--+..",".--.+.",".--..+"],"binary":["+..+++",".+....","..+...",".+++..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,3968]}, + {"counts":[0,1,2,0,0,1,2],"multiplicity":180,"rational":["+..+++",".+....","..+...","...+..",".--.+.",".--..+"],"binary":["+..+++",".+....","..+...","...+..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,448]}, + {"counts":[0,1,2,0,0,2,1],"multiplicity":180,"rational":["+..+++",".+....","..+...","...+..","....+.",".--..+"],"binary":["+..+++",".+....","..+...","...+..","....+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,32]}, + {"counts":[0,1,2,0,1,0,2],"multiplicity":180,"rational":["+...++",".+....","..+...",".--+..",".--.+.",".--..+"],"binary":["+...++",".+....","..+...",".+++..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,1984]}, + {"counts":[0,1,2,0,1,1,1],"multiplicity":360,"rational":["+...++",".+....","..+...",".--+..","....+.",".--..+"],"binary":["+...++",".+....","..+...",".+++..","....+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,224]}, + {"counts":[0,1,2,0,1,2,0],"multiplicity":180,"rational":["+...++",".+....","..+...",".--+..","....+.",".....+"],"binary":["+...++",".+....","..+...",".+++..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[0,1,2,0,2,0,1],"multiplicity":180,"rational":["+....+",".+....","..+...",".--+..",".--.+.",".--..+"],"binary":["+....+",".+....","..+...",".+++..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,992]}, + {"counts":[0,1,2,0,2,1,0],"multiplicity":180,"rational":["+....+",".+....","..+...",".--+..",".--.+.",".....+"],"binary":["+....+",".+....","..+...",".+++..",".++.+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,112]}, + {"counts":[0,1,2,1,0,0,2],"multiplicity":180,"rational":["+...++",".+....","..+...","...+..",".--.+.",".--..+"],"binary":["+...++",".+....","..+...","...+..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,224]}, + {"counts":[0,1,2,1,0,1,1],"multiplicity":360,"rational":["+...++",".+....","..+...","...+..","....+.",".--..+"],"binary":["+...++",".+....","..+...","...+..","....+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[0,1,2,1,1,0,1],"multiplicity":360,"rational":["+....+",".+....","..+...","...+..",".--.+.",".--..+"],"binary":["+....+",".+....","..+...","...+..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,112]}, + {"counts":[0,1,2,1,1,1,0],"multiplicity":360,"rational":["+....+",".+....","..+...","...+..",".--.+.",".....+"],"binary":["+....+",".+....","..+...","...+..",".++.+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[0,1,2,2,0,0,1],"multiplicity":180,"rational":["+....+",".+....","..+...","...+..","....+.",".--..+"],"binary":["+....+",".+....","..+...","...+..","....+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[0,2,0,0,0,0,4],"multiplicity":15,"rational":["+..+++",".+.+++","..++++","..-+..","..-.+.","..-..+"],"binary":["+..+++",".+.+++","..+.++","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[160,112288]}, + {"counts":[0,2,0,0,0,1,3],"multiplicity":60,"rational":["+.+.++",".++.++","..++++","..+...","...-+.","...-.+"],"binary":["+.+.++",".++.++","..++++","..+...","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[185,58128]}, + {"counts":[0,2,0,0,0,2,2],"multiplicity":90,"rational":["+.++.+",".+++.+","..++++","..+...","...+..","....-+"],"binary":["+.++.+",".+++.+","..+++.","..+...","...+..","....++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[208,30032]}, + {"counts":[0,2,0,0,1,0,3],"multiplicity":60,"rational":["+...++",".+..++","...+++","..+-..","...-+.","...-.+"],"binary":["+...++",".+..++","...+++","..++..","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[9,2976]}, + {"counts":[0,2,0,0,1,1,2],"multiplicity":180,"rational":["+..+.+",".+.+.+","...+++","..+.-.","...+..","....-+"],"binary":["+..+.+",".+.+.+","...++.","..+.+.","...+..","....++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,1712]}, + {"counts":[0,2,0,0,1,2,1],"multiplicity":180,"rational":["+..++.",".+.++.","...+++","..+..-","...+..","....+."],"binary":["+..++.",".+.++.","...+++","..+..+","...+..","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,992]}, + {"counts":[0,2,0,0,2,0,2],"multiplicity":90,"rational":["+....+",".+...+","....++","..+.-.","...+-.","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,32]}, + {"counts":[0,2,0,0,2,1,1],"multiplicity":180,"rational":["+...+.",".+..+.","....++","..+..-","...+.-","....+."],"binary":["+...+.",".+..+.","....++","..+..+","...+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,32]}, + {"counts":[0,2,0,1,0,0,3],"multiplicity":60,"rational":["+...++",".+..++","...+++","..+...","...-+.","...-.+"],"binary":["+...++",".+..++","...+++","..+...","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[9,1488]}, + {"counts":[0,2,0,1,0,1,2],"multiplicity":180,"rational":["+..+.+",".+.+.+","...+++","..+...","...+..","....-+"],"binary":["+..+.+",".+.+.+","...++.","..+...","...+..","....++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,856]}, + {"counts":[0,2,0,1,1,0,2],"multiplicity":180,"rational":["+....+",".+...+","....++","..+...","...+-.","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,16]}, + {"counts":[0,2,0,1,1,1,1],"multiplicity":360,"rational":["+...+.",".+..+.","....++","..+...","...+.-","....+."],"binary":["+...+.",".+..+.","....++","..+...","...+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[0,2,0,2,0,0,2],"multiplicity":90,"rational":["+....+",".+...+","....++","..+...","...+..","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,8]}, + {"counts":[0,2,1,0,0,0,3],"multiplicity":60,"rational":["+..+++",".+.+++","..+...","..-+..","..-.+.","..-..+"],"binary":["+..+++",".+.+++","..+...","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,3968]}, + {"counts":[0,2,1,0,0,1,2],"multiplicity":180,"rational":["+..+++",".+.+++","..+...","...+..","..-.+.","..-..+"],"binary":["+..+++",".+.+++","..+...","...+..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,1984]}, + {"counts":[0,2,1,0,0,2,1],"multiplicity":180,"rational":["+..+++",".+.+++","..+...","...+..","....+.","..-..+"],"binary":["+..+++",".+.+++","..+...","...+..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,992]}, + {"counts":[0,2,1,0,1,0,2],"multiplicity":180,"rational":["+...++",".+..++","..+...","..-+..","..-.+.","..-..+"],"binary":["+...++",".+..++","..+...","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,448]}, + {"counts":[0,2,1,0,1,1,1],"multiplicity":360,"rational":["+...++",".+..++","..+...","..-+..","....+.","..-..+"],"binary":["+...++",".+..++","..+...","..++..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,224]}, + {"counts":[0,2,1,0,1,2,0],"multiplicity":180,"rational":["+...++",".+..++","..+...","..-+..","....+.",".....+"],"binary":["+...++",".+..++","..+...","..++..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,112]}, + {"counts":[0,2,1,0,2,0,1],"multiplicity":180,"rational":["+....+",".+...+","..+...","..-+..","..-.+.","..-..+"],"binary":["+....+",".+...+","..+...","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,32]}, + {"counts":[0,2,1,0,2,1,0],"multiplicity":180,"rational":["+....+",".+...+","..+...","..-+..","..-.+.",".....+"],"binary":["+....+",".+...+","..+...","..++..","..+.+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[0,2,1,1,0,0,2],"multiplicity":180,"rational":["+...++",".+..++","..+...","...+..","..-.+.","..-..+"],"binary":["+...++",".+..++","..+...","...+..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,224]}, + {"counts":[0,2,1,1,0,1,1],"multiplicity":360,"rational":["+...++",".+..++","..+...","...+..","....+.","..-..+"],"binary":["+...++",".+..++","..+...","...+..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,112]}, + {"counts":[0,2,1,1,1,0,1],"multiplicity":360,"rational":["+....+",".+...+","..+...","...+..","..-.+.","..-..+"],"binary":["+....+",".+...+","..+...","...+..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[0,2,1,1,1,1,0],"multiplicity":360,"rational":["+....+",".+...+","..+...","...+..","..-.+.",".....+"],"binary":["+....+",".+...+","..+...","...+..","..+.+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[0,2,1,2,0,0,1],"multiplicity":180,"rational":["+....+",".+...+","..+...","...+..","....+.","..-..+"],"binary":["+....+",".+...+","..+...","...+..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[0,3,0,0,0,3,0],"multiplicity":20,"rational":["+..+++",".+.+++","..++++","...+..","....+.",".....+"],"binary":["+..+++",".+.+++","..++++","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[265,16064]}, + {"counts":[0,3,0,1,0,2,0],"multiplicity":60,"rational":["+...++",".+..++","..+.++","...+..","....+.",".....+"],"binary":["+...++",".+..++","..+.++","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,496]}, + {"counts":[0,3,0,2,0,1,0],"multiplicity":60,"rational":["+....+",".+...+","..+..+","...+..","....+.",".....+"],"binary":["+....+",".+...+","..+..+","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[1,0,0,0,0,0,5],"multiplicity":6,"rational":["+.....",".+.+++","..++++",".--+..",".--.+.",".--..+"],"binary":["+.....",".+.+++","..++++",".+++..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[430,241120]}, + {"counts":[1,0,0,0,0,1,4],"multiplicity":30,"rational":["+.....",".++.++",".+.+++",".+....","..--+.","..--.+"],"binary":["+.....",".++.++",".+.+++",".+....","..+++.","..++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[114,25824]}, + {"counts":[1,0,0,0,0,2,3],"multiplicity":60,"rational":["+.....",".+++.+",".++.++",".+....","..+...","...--+"],"binary":["+.....",".+++.+",".++.++",".+....","..+...","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[9,1488]}, + {"counts":[1,0,0,0,1,0,4],"multiplicity":30,"rational":["+.....","..+.++","...+++",".+--..","..--+.","..--.+"],"binary":["+.....","..+.++","...+++",".+++..","..+++.","..++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[114,25824]}, + {"counts":[1,0,0,0,1,1,3],"multiplicity":120,"rational":["+.....","..++.+","..+.++",".+.--.","..+...","...--+"],"binary":["+.....","..++.+","..+.++",".+.++.","..+...","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[33,3000]}, + {"counts":[1,0,0,0,1,2,2],"multiplicity":180,"rational":["+.....","..+++.","..++.+",".+..--","..+...","...+.."],"binary":["+.....","..+++.","..++.+",".+..++","..+...","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,224]}, + {"counts":[1,0,0,0,2,0,3],"multiplicity":60,"rational":["+.....","...+.+","....++",".+.--.","..+--.","...--+"],"binary":["+.....","...+.+","....++",".+.++.","..+++.","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[9,1488]}, + {"counts":[1,0,0,0,2,1,2],"multiplicity":180,"rational":["+.....","...++.","...+.+",".+..--","..+.--","...+.."],"binary":["+.....","...++.","...+.+",".+..++","..+.++","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,224]}, + {"counts":[1,0,0,1,0,0,4],"multiplicity":30,"rational":["+.....","..+.++","...+++",".+....","..--+.","..--.+"],"binary":["+.....","..+.++","...+++",".+....","..+++.","..++.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[30,2724]}, + {"counts":[1,0,0,1,0,1,3],"multiplicity":120,"rational":["+.....","..++.+","..+.++",".+....","..+...","...--+"],"binary":["+.....","..++.+","..+.++",".+....","..+...","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[3,168]}, + {"counts":[1,0,0,1,1,0,3],"multiplicity":120,"rational":["+.....","...+.+","....++",".+....","..+--.","...--+"],"binary":["+.....","...+.+","....++",".+....","..+++.","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[3,168]}, + {"counts":[1,0,0,1,1,1,2],"multiplicity":360,"rational":["+.....","...++.","...+.+",".+....","..+.--","...+.."],"binary":["+.....","...++.","...+.+",".+....","..+.++","...+.."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[1,0,0,2,0,0,3],"multiplicity":60,"rational":["+.....","...+.+","....++",".+....","..+...","...--+"],"binary":["+.....","...+.+","....++",".+....","..+...","...+++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,12]}, + {"counts":[1,0,1,0,0,0,4],"multiplicity":30,"rational":["+.....",".+....","..++++",".--+..",".--.+.",".--..+"],"binary":["+.....",".+....","..++++",".+.+..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,3344]}, + {"counts":[1,0,1,0,0,1,3],"multiplicity":120,"rational":["+.....",".+....","..++++","..+...",".-.-+.",".-.-.+"],"binary":["+.....",".+....","..++++","..+...",".+.++.",".+.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[3,336]}, + {"counts":[1,0,1,0,0,2,2],"multiplicity":180,"rational":["+.....",".+....","..++++","..+...","...+..",".-..-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,16]}, + {"counts":[1,0,1,0,1,0,3],"multiplicity":120,"rational":["+.....",".+....","...+++",".-+-..",".-.-+.",".-.-.+"],"binary":["+.....",".+....","...+++",".+++..",".+.++.",".+.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[17,1704]}, + {"counts":[1,0,1,0,1,1,2],"multiplicity":360,"rational":["+.....",".+....","...+++",".-+.-.","...+..",".-..-+"],"binary":["+.....",".+....","...+++",".++.+.","...+..",".+...+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[4,184]}, + {"counts":[1,0,1,0,1,2,1],"multiplicity":360,"rational":["+.....",".+....","...+++",".-+..-","...+..","....+."],"binary":["+.....",".+....","...+++",".++..+","...+..","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[1,0,1,0,2,0,2],"multiplicity":180,"rational":["+.....",".+....","....++",".-+.-.",".-.+-.",".-..-+"],"binary":["+.....",".+....","....++",".++.+.",".+.++.",".+...+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,856]}, + {"counts":[1,0,1,0,2,1,1],"multiplicity":360,"rational":["+.....",".+....","....++",".-+..-",".-.+.-","....+."],"binary":["+.....",".+....","....++",".++..+",".+.+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,112]}, + {"counts":[1,0,1,1,0,0,3],"multiplicity":120,"rational":["+.....",".+....","...+++","..+...",".-.-+.",".-.-.+"],"binary":["+.....",".+....","...+++","..+...",".+.++.",".+.+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[3,168]}, + {"counts":[1,0,1,1,0,1,2],"multiplicity":360,"rational":["+.....",".+....","...+++","..+...","...+..",".-..-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,8]}, + {"counts":[1,0,1,1,1,0,2],"multiplicity":360,"rational":["+.....",".+....","....++","..+...",".-.+-.",".-..-+"],"binary":["+.....",".+....","....++","..+...",".+.++.",".+...+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[4,92]}, + {"counts":[1,0,1,1,1,1,1],"multiplicity":720,"rational":["+.....",".+....","....++","..+...",".-.+.-","....+."],"binary":["+.....",".+....","....++","..+...",".+.+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[1,0,1,2,0,0,2],"multiplicity":180,"rational":["+.....",".+....","....++","..+...","...+..",".-..-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,4]}, + {"counts":[1,0,2,0,3,0,0],"multiplicity":60,"rational":["+.....",".+....","..+...",".--+..",".--.+.",".--..+"],"binary":["+.....",".+....","..+...",".+++..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,496]}, + {"counts":[1,0,2,1,2,0,0],"multiplicity":180,"rational":["+.....",".+....","..+...","...+..",".--.+.",".--..+"],"binary":["+.....",".+....","..+...","...+..",".++.+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,56]}, + {"counts":[1,0,2,2,1,0,0],"multiplicity":180,"rational":["+.....",".+....","..+...","...+..","....+.",".--..+"],"binary":["+.....",".+....","..+...","...+..","....+.",".++..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,4]}, + {"counts":[1,1,0,0,0,0,4],"multiplicity":30,"rational":["+.....",".+.+++","..++++","..-+..","..-.+.","..-..+"],"binary":["+.....",".+.+++","..+.++","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,3344]}, + {"counts":[1,1,0,0,0,1,3],"multiplicity":120,"rational":["+.....",".++.++","..++++","..+...","...-+.","...-.+"],"binary":["+.....",".++.++","..++++","..+...","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[17,1704]}, + {"counts":[1,1,0,0,0,2,2],"multiplicity":180,"rational":["+.....",".+++.+","..++++","..+...","...+..","....-+"],"binary":["+.....",".+++.+","..+++.","..+...","...+..","....++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[16,856]}, + {"counts":[1,1,0,0,1,0,3],"multiplicity":120,"rational":["+.....",".+..++","...+++","..+-..","...-+.","...-.+"],"binary":["+.....",".+..++","...+++","..++..","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[3,336]}, + {"counts":[1,1,0,0,1,1,2],"multiplicity":360,"rational":["+.....",".+.+.+","...+++","..+.-.","...+..","....-+"],"binary":["+.....",".+.+.+","...++.","..+.+.","...+..","....++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[4,184]}, + {"counts":[1,1,0,0,1,2,1],"multiplicity":360,"rational":["+.....",".+.++.","...+++","..+..-","...+..","....+."],"binary":["+.....",".+.++.","...+++","..+..+","...+..","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,112]}, + {"counts":[1,1,0,0,2,0,2],"multiplicity":180,"rational":["+.....",".+...+","....++","..+.-.","...+-.","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,16]}, + {"counts":[1,1,0,0,2,1,1],"multiplicity":360,"rational":["+.....",".+..+.","....++","..+..-","...+.-","....+."],"binary":["+.....",".+..+.","....++","..+..+","...+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[1,1,0,1,0,0,3],"multiplicity":120,"rational":["+.....",".+..++","...+++","..+...","...-+.","...-.+"],"binary":["+.....",".+..++","...+++","..+...","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[3,168]}, + {"counts":[1,1,0,1,0,1,2],"multiplicity":360,"rational":["+.....",".+.+.+","...+++","..+...","...+..","....-+"],"binary":["+.....",".+.+.+","...++.","..+...","...+..","....++"],"binary_verdict":"ok","pairs_per_label_F2_F3":[4,92]}, + {"counts":[1,1,0,1,1,0,2],"multiplicity":360,"rational":["+.....",".+...+","....++","..+...","...+-.","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,8]}, + {"counts":[1,1,0,1,1,1,1],"multiplicity":720,"rational":["+.....",".+..+.","....++","..+...","...+.-","....+."],"binary":["+.....",".+..+.","....++","..+...","...+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[1,1,0,2,0,0,2],"multiplicity":180,"rational":["+.....",".+...+","....++","..+...","...+..","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,4]}, + {"counts":[1,1,1,0,0,0,3],"multiplicity":120,"rational":["+.....",".+.+++","..+...","..-+..","..-.+.","..-..+"],"binary":["+.....",".+.+++","..+...","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,64]}, + {"counts":[1,1,1,0,0,1,2],"multiplicity":360,"rational":["+.....",".+.+++","..+...","...+..","..-.+.","..-..+"],"binary":["+.....",".+.+++","..+...","...+..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,32]}, + {"counts":[1,1,1,0,0,2,1],"multiplicity":360,"rational":["+.....",".+.+++","..+...","...+..","....+.","..-..+"],"binary":["+.....",".+.+++","..+...","...+..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[1,1,1,0,1,0,2],"multiplicity":360,"rational":["+.....",".+..++","..+...","..-+..","..-.+.","..-..+"],"binary":["+.....",".+..++","..+...","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,32]}, + {"counts":[1,1,1,0,1,1,1],"multiplicity":720,"rational":["+.....",".+..++","..+...","..-+..","....+.","..-..+"],"binary":["+.....",".+..++","..+...","..++..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[1,1,1,0,1,2,0],"multiplicity":360,"rational":["+.....",".+..++","..+...","..-+..","....+.",".....+"],"binary":["+.....",".+..++","..+...","..++..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[1,1,1,0,2,0,1],"multiplicity":360,"rational":["+.....",".+...+","..+...","..-+..","..-.+.","..-..+"],"binary":["+.....",".+...+","..+...","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[1,1,1,0,2,1,0],"multiplicity":360,"rational":["+.....",".+...+","..+...","..-+..","..-.+.",".....+"],"binary":["+.....",".+...+","..+...","..++..","..+.+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[1,1,1,1,0,0,2],"multiplicity":360,"rational":["+.....",".+..++","..+...","...+..","..-.+.","..-..+"],"binary":["+.....",".+..++","..+...","...+..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,16]}, + {"counts":[1,1,1,1,0,1,1],"multiplicity":720,"rational":["+.....",".+..++","..+...","...+..","....+.","..-..+"],"binary":["+.....",".+..++","..+...","...+..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[1,1,1,1,1,0,1],"multiplicity":720,"rational":["+.....",".+...+","..+...","...+..","..-.+.","..-..+"],"binary":["+.....",".+...+","..+...","...+..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[1,1,1,1,1,1,0],"multiplicity":720,"rational":["+.....",".+...+","..+...","...+..","..-.+.",".....+"],"binary":["+.....",".+...+","..+...","...+..","..+.+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,4]}, + {"counts":[1,1,1,2,0,0,1],"multiplicity":360,"rational":["+.....",".+...+","..+...","...+..","....+.","..-..+"],"binary":["+.....",".+...+","..+...","...+..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,4]}, + {"counts":[1,2,0,0,0,3,0],"multiplicity":60,"rational":["+.....",".+.+++","..++++","...+..","....+.",".....+"],"binary":["+.....",".+.+++","..++++","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[25,496]}, + {"counts":[1,2,0,1,0,2,0],"multiplicity":180,"rational":["+.....",".+..++","..+.++","...+..","....+.",".....+"],"binary":["+.....",".+..++","..+.++","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[7,56]}, + {"counts":[1,2,0,2,0,1,0],"multiplicity":180,"rational":["+.....",".+...+","..+..+","...+..","....+.",".....+"],"binary":["+.....",".+...+","..+..+","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,4]}, + {"counts":[2,0,0,0,0,0,4],"multiplicity":15,"rational":["+.....",".+....","..++++","..-+..","..-.+.","..-..+"],"binary":null,"binary_verdict":"binary one A","pairs_per_label_F2_F3":[0,40]}, + {"counts":[2,0,0,0,0,1,3],"multiplicity":60,"rational":["+.....",".+....","..++++","..+...","...-+.","...-.+"],"binary":["+.....",".+....","..++++","..+...","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,24]}, + {"counts":[2,0,0,0,0,2,2],"multiplicity":90,"rational":["+.....",".+....","..++++","..+...","...+..","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,8]}, + {"counts":[2,0,0,0,1,0,3],"multiplicity":60,"rational":["+.....",".+....","...+++","..+-..","...-+.","...-.+"],"binary":["+.....",".+....","...+++","..++..","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,24]}, + {"counts":[2,0,0,0,1,1,2],"multiplicity":180,"rational":["+.....",".+....","...+++","..+.-.","...+..","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,8]}, + {"counts":[2,0,0,0,1,2,1],"multiplicity":180,"rational":["+.....",".+....","...+++","..+..-","...+..","....+."],"binary":["+.....",".+....","...+++","..+..+","...+..","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[2,0,0,0,2,0,2],"multiplicity":90,"rational":["+.....",".+....","....++","..+.-.","...+-.","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,8]}, + {"counts":[2,0,0,0,2,1,1],"multiplicity":180,"rational":["+.....",".+....","....++","..+..-","...+.-","....+."],"binary":["+.....",".+....","....++","..+..+","...+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[2,0,0,1,0,0,3],"multiplicity":60,"rational":["+.....",".+....","...+++","..+...","...-+.","...-.+"],"binary":["+.....",".+....","...+++","..+...","...++.","...+.+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,12]}, + {"counts":[2,0,0,1,0,1,2],"multiplicity":180,"rational":["+.....",".+....","...+++","..+...","...+..","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,4]}, + {"counts":[2,0,0,1,1,0,2],"multiplicity":180,"rational":["+.....",".+....","....++","..+...","...+-.","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,4]}, + {"counts":[2,0,0,1,1,1,1],"multiplicity":360,"rational":["+.....",".+....","....++","..+...","...+.-","....+."],"binary":["+.....",".+....","....++","..+...","...+.+","....+."],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,4]}, + {"counts":[2,0,0,2,0,0,2],"multiplicity":90,"rational":["+.....",".+....","....++","..+...","...+..","....-+"],"binary":null,"binary_verdict":"binary 1x1","pairs_per_label_F2_F3":[0,2]}, + {"counts":[2,0,1,0,3,0,0],"multiplicity":60,"rational":["+.....",".+....","..+...","..-+..","..-.+.","..-..+"],"binary":["+.....",".+....","..+...","..++..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[2,0,1,1,2,0,0],"multiplicity":180,"rational":["+.....",".+....","..+...","...+..","..-.+.","..-..+"],"binary":["+.....",".+....","..+...","...+..","..+.+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,4]}, + {"counts":[2,0,1,2,1,0,0],"multiplicity":180,"rational":["+.....",".+....","..+...","...+..","....+.","..-..+"],"binary":["+.....",".+....","..+...","...+..","....+.","..+..+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,2]}, + {"counts":[2,1,0,0,0,3,0],"multiplicity":60,"rational":["+.....",".+....","..++++","...+..","....+.",".....+"],"binary":["+.....",".+....","..++++","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,8]}, + {"counts":[2,1,0,1,0,2,0],"multiplicity":180,"rational":["+.....",".+....","..+.++","...+..","....+.",".....+"],"binary":["+.....",".+....","..+.++","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,4]}, + {"counts":[2,1,0,2,0,1,0],"multiplicity":180,"rational":["+.....",".+....","..+..+","...+..","....+.",".....+"],"binary":["+.....",".+....","..+..+","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,2]}, + {"counts":[3,0,0,3,0,0,0],"multiplicity":20,"rational":["+.....",".+....","..+...","...+..","....+.",".....+"],"binary":["+.....",".+....","..+...","...+..","....+.",".....+"],"binary_verdict":"ok","pairs_per_label_F2_F3":[1,1]} +] diff --git a/research/two-block-signatures/SOURCES.json b/research/two-block-signatures/SOURCES.json new file mode 100644 index 0000000000..129cf41c20 --- /dev/null +++ b/research/two-block-signatures/SOURCES.json @@ -0,0 +1,98 @@ +{ + "schema_version": 1, + "base_commit": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "d59b5035e7b4cbaa9d688a1d32dd0d6eb79c466a", + "sha256": "9b8d0eea95b3bf0dfcb7938a732a6439b87a2685dec2a5ab9e525b3b34debbfa" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81" + }, + { + "path": "research/two-block-signatures/source/6691-README.md", + "usage": "provenance", + "git_blob": "e3e9781e5881d345694e19e3bb3b9be329621b1b", + "sha256": "0cbcb749f758e2b8badf6bd5a87512b4b709331c894f0bcdb3126e1002df3e09", + "vendored_as": "source/6691-README.md", + "upstream_origin": { + "commit": "e68cb25dcc859efb03d616305f543fda2d90ece1", + "path": "research/two-plane-signature-classes/README.md", + "git_blob": "e3e9781e5881d345694e19e3bb3b9be329621b1b", + "author": "Nick Petalas", + "pr": "https://github.com/CrocSwap/integer-mult-bounds/pull/6691" + }, + "pin": "head:c861a61650c1ea891b2ed6eb5a6f2161c58c7d33:research/two-block-signatures/source/6691-README.md" + }, + { + "path": "research/two-block-signatures/source/6691-PROOF.md", + "usage": "provenance", + "git_blob": "b13a9a6c984b5b3c0a89849942c5f51dcd2e60ad", + "sha256": "a6db4dfce4ece302678e9c94e63bc85b550e976d056f273378c25b792cd09b6d", + "vendored_as": "source/6691-PROOF.md", + "upstream_origin": { + "commit": "e68cb25dcc859efb03d616305f543fda2d90ece1", + "path": "research/two-plane-signature-classes/PROOF.md", + "git_blob": "b13a9a6c984b5b3c0a89849942c5f51dcd2e60ad", + "author": "Nick Petalas", + "pr": "https://github.com/CrocSwap/integer-mult-bounds/pull/6691" + }, + "pin": "head:c861a61650c1ea891b2ed6eb5a6f2161c58c7d33:research/two-block-signatures/source/6691-PROOF.md" + }, + { + "path": "research/two-block-signatures/source/6691-RESULT.json", + "usage": "provenance", + "git_blob": "27f6b53314af26f9200fb3e9a8d597ef70eaab1a", + "sha256": "e8fd2b58ed9c2e359d20c11d0885014058f8567219bfc6aa5ce692e1c6ac17d7", + "vendored_as": "source/6691-RESULT.json", + "upstream_origin": { + "commit": "e68cb25dcc859efb03d616305f543fda2d90ece1", + "path": "research/two-plane-signature-classes/RESULT.json", + "git_blob": "27f6b53314af26f9200fb3e9a8d597ef70eaab1a", + "author": "Nick Petalas", + "pr": "https://github.com/CrocSwap/integer-mult-bounds/pull/6691" + }, + "pin": "head:c861a61650c1ea891b2ed6eb5a6f2161c58c7d33:research/two-block-signatures/source/6691-RESULT.json" + }, + { + "path": "research/rational-joint-support-screen/TERNARY-SCREEN.txt", + "usage": "provenance", + "git_blob": "6b1430e3a5aef953e8c6e84772fd8a26f023a9e1", + "sha256": "ded4c54c486864dd3d3c2084bbb15f471bb7926af21f6d0c8a4582312a1001ac", + "vendored_as": "source/3997-TERNARY-SCREEN.txt" + }, + { + "path": "research/rational-joint-support-screen/README.md", + "usage": "provenance", + "git_blob": "3a791075bfc2f52731d94bbc8c5e11099466c5e7", + "sha256": "092bd48c8384f4d57d4161391f27e3aaee0f7a6a4b3cadb2097240b209cdc999" + }, + { + "path": "research/two-plane-copy-floor/README.md", + "usage": "provenance", + "git_blob": "8452ac31bb4ae76ed2664bf41eb3eb7c9b8ce576", + "sha256": "3ae78a4cbb01ece18ecc57ecca6b592413959723fa1edd5b41815b834d65d75d" + }, + { + "path": "LICENSE", + "usage": "provenance", + "git_blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "vendored_as": "source/LICENSE" + } + ], + "external_background": [ + { + "title": "Systems of Distinct Representatives and Linear Algebra", + "author": "Jack Edmonds", + "year": 1967, + "url": "https://nvlpubs.nist.gov/nistpubs/jres/71B/jresv71Bn4p241_A1b.pdf", + "role": "Classical generic determinant/matching correspondence, applied also to cofactors." + } + ] +} diff --git a/research/two-block-signatures/TASK.json b/research/two-block-signatures/TASK.json new file mode 100644 index 0000000000..a218808ca6 --- /dev/null +++ b/research/two-block-signatures/TASK.json @@ -0,0 +1,81 @@ +{ + "schema_version": 1, + "task_id": "coverage-law-change", + "priority_revision": 8, + "base_commit": "7c49fe32c55de02c2c873655c804b16e4c3fef0a", + "original_card": { + "id": "coverage-law-change", + "question": "Can a completed call earn more independent productive target credit without an offsetting paid bill?", + "starting_points": [ + "docs/research/current-priorities.md", + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md" + ], + "methods": [ + "Construct and independently check one source-bound instance of the stated first experiment.", + "Seek an exact counterexample or target-specific complete-budget obstruction to that same proposed change." + ], + "acceptance_gate": "A source-bound arbitrary-input identity and legal producer/consumer boundary with the complete paid and productive target invoice, including restoration, ownership, native alignment and extra charges. Price under the actual current model; historical ceiling.py assumptions must be established before use. A favorable optimistic relaxation keeps a route open but is not a completed supplier. A scoped local result remains useful; expansion requires the family-level budget gate.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_selected_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read revision 8, the selected review and live exact-source handoffs. Then follow this card's bounded first_experiment.", + "scope": "Source-bound orientation only, not a supplier replay or theorem proof." + }, + "first_experiment": "Use #5599 as a completed positive control, then choose one uncovered cut/module beyond an applicable frozen exclusion. Derive independence, saturation and chronological availability rather than counting rational rank alone. Price target credits and all new jobs together, then check compiler and actual caller compatibility. Stop on a nonphysical credit or an unfavorable complete relaxation.", + "bottleneck_link": "Judge the actual current supplier contract and complete signed target/paid bill; frozen-profile ceilings require an applicability proof.", + "allowed_variations": [ + "One exact source head, helper/cut region or quantified proposition and changed hypothesis; check live handoffs first. Different seeds are not different scopes." + ], + "scope_change_triggers": [ + "Changing source head, helper/cut domain, operation alphabet or caller boundary without recording the new scope.", + "Treating an archived proposal or local numerical pass as complete supplier admission." + ], + "overlap_terms": [ + "target credit", + "helper split", + "coverage law" + ], + "existing_checks": [ + { + "scope": "Selected PR5599: complete helper-subspace construction and independent caller replay; five framework assumptions remain.", + "evidence": "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md", + "remaining": "The next experiment must identify uncovered source-specific work. Successor archive intake does not transfer this admission.", + "status": "reviewed", + "source_commit": "09dd0965711ca7eeb169057a420abab1c9052137", + "selected_record_sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5" + } + ] + }, + "scope_status": "changed", + "actual_scope": "Answer open question 1 of PR6691. Classify plane-level source/reader signatures of all square bases with two positive port blocks, including the six-port generic census, every binary exception and consequences for additive tariffs.", + "scope_change_reason": "The coverage-law-change card requests physical target credit. The source handoff instead asks for exact algebraic eligibility of two-block basis patterns. The current source-binding orientation was run, followed by the credited four-port control.", + "bottleneck_link": "A finite signature list screens block-based decoder tariffs. Coordinate assignments already attain the minimum for monotone additive tariffs. Native delivery, target credits, restoration and physical prices require their own contracts.", + "budget_minutes": 60, + "stop_rule": "Stop with the necessary/sufficient theorem, constructive witnesses, independent generic and finite-field counts, exact tariff certificates and an exported replay. Three-block signatures and a physical supplier are separate questions.", + "outcome": "completed", + "evidence": "PROOF.md, COUNTING.md, SIX-PORTS.json, RESULT.json and PRICE-CERTIFICATES.json. All six-port labels are constructed and inverted. Independent structural matchings and finite projective enumerations check coverage and multiplicities.", + "author": "SHIN09-git with OpenAI Codex assistance", + "ai_assistance": "Substantial OpenAI Codex assistance in proofs, experiments, source and literature checks, code and writing. The differently structured oracles have the same assisted author.", + "open_questions": [ + { + "question": "Do generic and actual block signatures still coincide for three blocks of two ports?", + "why_it_matters": "A reader can omit one block while its coordinate vector belongs to the sum of the two others. The two-block graph proof uses a single opposite row space.", + "first_step": "Look for an actual three-block basis whose exact signature is absent from the generic cofactor screen. Use the explicit six-port tests as controls.", + "blocked_by": "The two-block coordinate-axis criterion alone does not describe sums of two opposite blocks." + }, + { + "question": "Can exact per-signature basis multiplicities be expressed for arbitrary finite field order?", + "why_it_matters": "Feasibility does not give the probability of observing a signature under a uniform random basis.", + "first_step": "Recover the F2/F3 frequencies in SIX-PORTS.json from a rank or incidence summation on a fixed message profile.", + "blocked_by": "Counting compatible complementary pairs must preserve all row and column support requirements." + } + ], + "scope_key": "2bf6355a8dd01ca324fb", + "source_handoff": "https://github.com/CrocSwap/integer-mult-bounds/pull/6691" +} diff --git a/research/two-block-signatures/VALIDATION.md b/research/two-block-signatures/VALIDATION.md new file mode 100644 index 0000000000..92930cdd45 --- /dev/null +++ b/research/two-block-signatures/VALIDATION.md @@ -0,0 +1,43 @@ +# Sources and finite checks + +The general claim is a written proof. The checks below use exact arithmetic and independent counting algorithms. They were designed and implemented in the same assisted contribution. Independent human and formal proof-kernel review remain open. + +| Check | Domain and observed outcome | +| --- | --- | +| Four-port source control | Invert and decode every one of the 439 retained signed witnesses from Gonzalo Mier's #3997. Compare the complete code set and Nick Petalas's #6691 counts. The 391 zero-one signatures over the rationals and the 355 signatures in GL4 over the two-element field belong to different domains | +| Construction | 3,485 matrices across all positive block splits of sizes 2–6. Check the input and inverse masks, and both inverse products, over Q, F2, F3 and F4 where applicable | +| All six-port labels | Build and invert all 33,727 rational and 33,727 ternary witnesses, and all 30,547 binary witnesses, in their supplied label order. For the rational and ternary cases the second implementation uses integer fraction-free elimination, verifies the scaled inverse product and then reads the masks | +| Generic perfect matchings | All 65,536 unrestricted four-port supports. The 37,823 structurally invertible ones give exactly the predecessor's 439 codes. All 262,144 six-port 3+3 graph-chart supports yield 2,500 codes for that fixed pivot labeling and 188 profiles under arbitrary relabeling | +| Binary spaces | Enumerate both reduced row-echelon spaces and intersect their actual vector sets for every block split through six ports. At 3+3, all 714,240 complementary pairs among 1,395 three-spaces give exactly the 30,547 predicted codes. At 2+2, enumeration of all 65,536 binary matrices independently recovers all 20,160 invertible matrices, including every code's multiplicity | +| Ternary spaces | Enumerate all 33,880 three-spaces in six coordinates. Coordinate permutations and sign changes partition the first space into 31 orbits. For each representative, test every possible second space using projective-line intersections. With exact orbit weights, all 666,860,040 ordered complementary pairs give precisely the 188 predicted profiles. The two-port control accounts for 10,530 complementary pairs in four coordinates | +| Closed formulas | The ordinary count and the three separate binary deficits agree with weighted seven-type enumeration for all 78 splits of sizes 2–13. Larger balanced values, including 32+32, are in RESULT.json | +| Tariffs | Twelve label-dependent monotone price tables are checked on every six-port signature. The nonmonotone parity family is independently minimized at balanced sizes 2–8. The 21 rational certificates cover every missing binary profile and use exact integer inequalities or convex weights | + +## Why the finite oracles are independent + +[matching_oracle.py](matching_oracle.py) does not call the signature classifier or make an incidence test. For each port-level support it determines whether a full matching exists, and repeats the test after deleting the appropriate row and column for each entry of the inverse. The terms of a generic determinant have distinct monomials. A matching therefore characterizes nonvanishing over the rational function field. Encoding the set of supporting patterns in a bitset makes all the cofactor tests directly reproducible. A fixed pivot labeling does not cover every labeled signature, but permitting all label permutations covers every profile by the simultaneous-pivot proof. + +[binary_oracle.py](binary_oracle.py) constructs genuine finite subspaces, with no generic-rank assumption. [ternary_oracle.py](ternary_oracle.py) assigns each line its unique point in projective space and enumerates every row-echelon representative. Two equal-dimensional spaces in complementary ambient dimension are complementary exactly when their point sets do not intersect. Each first d-space has q^(d^2) complements, the graphs of linear maps over one fixed complement. Adjacent coordinate transpositions and independent sign changes preserve the seven-type counts under relabeling. For each orbit, its size times the representative's histogram gives the exact total. The total for a single labeling is the profile total divided by its multinomial multiplicity, with exact divisibility checked. For example, with all six messages mixed the pair counts are 64,560 over F2 and 309,983,240 over F3. + +The 12 separating prices and nine convex mixtures were found using numerical linear programming during exploration. The committed verifier checks every certificate with integer arithmetic against the complete binary profile set. No optimizer is needed to reproduce the published result. + +## Direct replay + +```sh +python3.12 -I -W error -B research/two-block-signatures/verify.py +python3.12 -I -O -W error -B research/two-block-signatures/verify.py +python3.12 -I -W error -B research/two-block-signatures/census_check.py +python3.12 -I -O -W error -B research/two-block-signatures/census_check.py +python3.12 -I -W error -B research/two-block-signatures/label_check.py +python3.12 -I -W error -B research/two-block-signatures/audit_mutations.py +``` + +Markers are `PASS_TWO_BLOCK_SIGNATURES`, `PASS_TWO_BLOCK_INDEPENDENT_CENSUSES`, `PASS_TWO_BLOCK_LABELED_WITNESSES` and `PASS_TWO_BLOCK_MUTATIONS`. The fault audit starts with four private-copy positive controls. Twenty actual substitutions are rejected for their named reasons under both interpreter modes. They include losing pivot capacity, relaxing an isolated binary entry, transposing the cofactor, treating four elements as two, ignoring an orbit weight, corrupting a price certificate and altering a retained source. Normal and optimized scientific receipts agree. + +All scientific entry points are standalone, work on read-only package files and need no network or Git executable. In a full Git checkout the source-history check runs separately. + +```sh +python3.12 -B scripts/check_research_commit.py --package research/two-block-signatures --check-source-history +``` + +On a POSIX system add `--check-modes` to check executable-mode provenance. diff --git a/research/two-block-signatures/VERIFY.json b/research/two-block-signatures/VERIFY.json new file mode 100644 index 0000000000..fa273b805a --- /dev/null +++ b/research/two-block-signatures/VERIFY.json @@ -0,0 +1,83 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [], + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-W", + "error", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 100, + "checks": "Construct witnesses and check both inverse products, prior source bindings, quadratic count formulas and positive price certificates." + }, + { + "argv": [ + "{python}", + "-I", + "-O", + "-W", + "error", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 100, + "checks": "Repeat the complete constructive checks with optimizations enabled." + }, + { + "argv": [ + "{python}", + "-I", + "-W", + "error", + "-B", + "{package}/census_check.py" + ], + "timeout_seconds": 150, + "checks": "Independently enumerate generic cofactor matchings, binary complementary spaces and ternary projective point incidences." + }, + { + "argv": [ + "{python}", + "-I", + "-O", + "-W", + "error", + "-B", + "{package}/census_check.py" + ], + "timeout_seconds": 150, + "checks": "Repeat both finite-field and generic exhaustive censuses in optimized Python." + }, + { + "argv": [ + "{python}", + "-I", + "-W", + "error", + "-B", + "{package}/label_check.py" + ], + "timeout_seconds": 150, + "checks": "Literally invert every labeled six-port witness over Q and F3, and every available F2 witness." + }, + { + "argv": [ + "{python}", + "-I", + "-W", + "error", + "-B", + "{package}/audit_mutations.py" + ], + "timeout_seconds": 300, + "checks": "Four private-copy positive controls. Twenty concrete faults rejected for specified reasons in normal and optimized interpreters." + } + ] +} diff --git a/research/two-block-signatures/algebra.py b/research/two-block-signatures/algebra.py new file mode 100644 index 0000000000..f976b877b8 --- /dev/null +++ b/research/two-block-signatures/algebra.py @@ -0,0 +1,70 @@ +"""Literal inverse and mask reading for the finite witnesses. No residue or signature classification.""" +from fractions import Fraction + + +class Field: + def __init__(self, label): + self.label = label + self.modulus = {"Q":0, "F2":2, "F3":3, "F4":4}[label] + + def value(self, a): + return Fraction(a) if self.label == "Q" else a % self.modulus + + def minus(self, a, b): + if self.label == "F4": + return a ^ b + return (a-b) % self.modulus if self.modulus else a-b + + def times(self, a, b): + if self.label == "F4": + # F2[z]/(z^2+z+1), coefficient bits in ascending degree. + raw = (a if b&1 else 0) ^ (a << 1 if b&2 else 0) + return raw ^ 7 if raw & 4 else raw + return (a*b) % self.modulus if self.modulus else a*b + + def reciprocal(self, a): + if self.label == "F4": + return (None,1,3,2)[a] + return pow(a, -1, self.modulus) if self.modulus else 1/a + + +def inverse(matrix, field): + n = len(matrix) + f = Field(field) + rows = [[f.value(a) for a in row] + [int(i == j) for j in range(n)] for i,row in enumerate(matrix)] + for j in range(n): + pivot = next((i for i in range(j,n) if rows[i][j]), None) + if pivot is None: + return None + rows[j], rows[pivot] = rows[pivot], rows[j] + scale = f.reciprocal(rows[j][j]) + rows[j] = [f.times(scale,x) for x in rows[j]] + for i in range(n): + if i != j and rows[i][j]: + c = rows[i][j] + rows[i] = [f.minus(x,f.times(c,y)) for x,y in zip(rows[i],rows[j],strict=True)] + return tuple(tuple(row[n:]) for row in rows) + + +def masks(matrix, inv, p): + symbols = [] + for j in range(len(matrix)): + sources = int(any(row[j] for row in matrix[:p])) + 2*int(any(row[j] for row in matrix[p:])) + readers = int(any(inv[j][:p])) + 2*int(any(inv[j][p:])) + symbols.append(4*sources + readers) + return tuple(symbols) + + +def inverse_is_two_sided(matrix, inv, field): + f = Field(field) + n = len(matrix) + for first, second in ((matrix,inv), (inv,matrix)): + for i in range(n): + for j in range(n): + # Subtract the entire dot product from the desired entry. + delta = int(i == j) + for k in range(n): + delta = f.minus(delta, f.times(first[i][k], second[k][j])) + if delta: + return False + return True diff --git a/research/two-block-signatures/audit_mutations.py b/research/two-block-signatures/audit_mutations.py new file mode 100644 index 0000000000..0d16fde731 --- /dev/null +++ b/research/two-block-signatures/audit_mutations.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +"""Run positive controls and introduce one semantic fault per private copy.""" +import json +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile + +PACKAGE = Path(__file__).resolve().parent +PRIMARY, CENSUS = "verify.py", "census_check.py" +# Use one exact substitution per source fault. Reject only the named diagnostic. +FAULTS = [ + ("oversubscribed pivots", "signatures.py", "if u < 0 or w < 0:", "if u < -1 or w < -1:", CENSUS, "binary space census disagrees"), + ("ignore A saturation", "signatures.py", "if (p-v.aa-v.ma == 0) != (q-v.bb-v.bm == 0):", "if False:", CENSUS, "binary space census disagrees"), + ("ignore B saturation", "signatures.py", "if (q-v.bb-v.mb == 0) != (p-v.aa-v.am == 0):", "if False:", CENSUS, "binary space census disagrees"), + ("only one slack for an isolated bit", "signatures.py", "(v.am and v.mb) or (v.ma and v.bm)", "(v.am or v.mb) or (v.ma or v.bm)", CENSUS, "binary space census disagrees"), + ("admit odd one-row core", "signatures.py", 'return "ok" if v.am or v.ma else "binary one A"', 'return "ok"', CENSUS, "binary space census disagrees"), + ("admit odd one-column core", "signatures.py", 'return "ok" if v.mb or v.bm else "binary one B"', 'return "ok"', CENSUS, "binary space census disagrees"), + ("apply binary exception to F4", "signatures.py", 'binary=field == "F2"', 'binary=field in ("F2","F4")', PRIMARY, "binary 1x1"), + ("ignore ternary pivot scalar", "signatures.py", '"F3": 2 if u*w%3 == 1 else 1', '"F3": 1', PRIMARY, "constructed witness is singular"), + ("keep both core entries", "signatures.py", 'if field == "F2" and u*w % 2:', 'if False:', PRIMARY, "constructed witness is singular"), + ("reverse reader block", "binary_oracle.py", "2*spread(full^e,n)", "spread(full^e,n)", CENSUS, "binary space census disagrees"), + ("transpose cofactor incorrectly", "matching_oracle.py", "cofactors[j][i] |=", "cofactors[i][j] |=", CENSUS, "oracle reported a forbidden mask"), + ("retain intersecting spaces", "ternary_oracle.py", "if a & b:", "if False:", CENSUS, "ternary complement multiplicity"), + ("omit monomial orbit weight", "ternary_oracle.py", "total[key] += weight*count", "total[key] += count", CENSUS, "ternary total pair count"), + ("omit doubly saturated patterns", "counts.py", " + both(p)*both(q)", " + 0", PRIMARY, "ordinary count formula differs"), + ("miss one odd side", "counts.py", '"binary one B":odd_side(q,p)', '"binary one B":0', PRIMARY, "exception count formula differs"), + ("corrupt prior source", "source/6691-PROOF.md", "## Lemma 1:", "## Altered lemma:", PRIMARY, "retained source hash"), +] +DATA_FAULTS = [ + ("flatten separating tariff", "PRICE-CERTIFICATES.json", PRIMARY, "price does not strictly separate"), + ("perturb convex weights", "PRICE-CERTIFICATES.json", PRIMARY, "convex combination differs from profile"), + ("erase signed matrix entry", "SIX-PORTS.json", PRIMARY, "stored witness certificate differs"), + ("inflate ternary multiplicity", "SIX-PORTS.json", CENSUS, "stored per-label multiplicity differs"), +] + + +def change_data(name, original): + data = json.loads(original) + if name == "flatten separating tariff": + next(row for row in data if "prices" in row)["prices"] = [1]*7 + elif name == "perturb convex weights": + next(row for row in data if "mixture" in row)["mixture"][0]["weight"] += 1 + elif name == "erase signed matrix entry": + data[0]["rational"][0] = "......" + else: + data[0]["pairs_per_label_F2_F3"][1] += 1 + return json.dumps(data).encode() + + +def invoke(root, entry, optimize): + extra = ["-O"] if optimize else [] + return subprocess.run([sys.executable,"-I",*extra,"-W","error","-B",str(root/entry)],cwd=root, + capture_output=True,text=True,encoding="utf-8",timeout=120) + + +def test_fault(root, name, filename, original, faulty, entry, why): + (root/filename).write_bytes(faulty) + for opt in (False, True): + proc = invoke(root,entry,opt) + last = proc.stderr.strip().splitlines()[-1:] or [""] + if proc.returncode == 0 or last[0] != "ValueError: "+why: + raise ValueError(f"{name} optimized={opt}: expected {why!r}, got {last[0]!r}") + (root/filename).write_bytes(original) + return [name,why] + + +def audit(): + results = [] + with tempfile.TemporaryDirectory(prefix="two-ports-") as tmp: + root = Path(tmp) + for f in PACKAGE.rglob("*"): + if f.is_file() and "__pycache__" not in f.parts: + dest = root/f.relative_to(PACKAGE) + dest.parent.mkdir(parents=True,exist_ok=True) + shutil.copyfile(f,dest) + for entry in (PRIMARY,CENSUS): + positives = [] + for opt in (False,True): + proc = invoke(root,entry,opt) + if proc.returncode: + raise ValueError(proc.stderr[-600:]) + positives.append(json.loads(proc.stdout)) + if positives[0] != positives[1]: + raise ValueError("private-copy positive receipts differ") + for name,filename,old,new,entry,why in FAULTS: + raw = (root/filename).read_bytes() + if raw.count(old.encode()) != 1: + raise ValueError("ambiguous mutation target "+name) + results.append(test_fault(root,name,filename,raw,raw.replace(old.encode(),new.encode()),entry,why)) + for name,filename,entry,why in DATA_FAULTS: + raw = (root/filename).read_bytes() + results.append(test_fault(root,name,filename,raw,change_data(name,raw),entry,why)) + return dict(status="PASS_TWO_BLOCK_MUTATIONS", positive_controls=4, rejected_probes=2*len(results), faults=results) + + +if __name__ == "__main__": + print(json.dumps(audit(),sort_keys=True)) diff --git a/research/two-block-signatures/binary_oracle.py b/research/two-block-signatures/binary_oracle.py new file mode 100644 index 0000000000..47ea514a5c --- /dev/null +++ b/research/two-block-signatures/binary_oracle.py @@ -0,0 +1,42 @@ +"""Exhaustive ordered complementary row spaces over F2, independent of the signature criterion.""" +from collections import Counter +from itertools import combinations + + +def spaces(n, d): + """Every d-space once in reduced row-echelon form, with all its vectors.""" + for pivots in combinations(range(n), d): + free = [(i,j) for i,p in enumerate(pivots) for j in range(p+1,n) if j not in pivots] + for assignment in range(1 << len(free)): + basis = [1 << j for j in pivots] + for k,(i,j) in enumerate(free): + if assignment >> k & 1: + basis[i] |= 1 << j + words = [0] + for row in basis: + words += [x ^ row for x in words] + support = 0 + elements = 0 + for word in words: + support |= word + elements |= 1 << word + axes = sum(1 << j for j in range(n) if (1 << j) in words) + yield elements, support, axes + + +def spread(mask, n): + return sum(((mask >> j) & 1) << (4*j) for j in range(n)) + + +def enumerate_pairs(n, p): + """A source mask reads block columns. A reader mask reads opposite axes.""" + full = (1 << n)-1 + # Separate the bit positions that each plane contributes to each nibble. + left = [(elements, 4*spread(s,n) + 2*spread(full^e,n)) for elements,s,e in spaces(n,p)] + right = [(elements, 8*spread(s,n) + spread(full^e,n)) for elements,s,e in spaces(n,n-p)] + tally = Counter() + for vectors, x in left: + for other, y in right: + if vectors & other == 1: # The all-zero vector is the only common vector. + tally[x+y] += 1 + return len(left), len(right), tally diff --git a/research/two-block-signatures/census_check.py b/research/two-block-signatures/census_check.py new file mode 100644 index 0000000000..da8e1c9e1c --- /dev/null +++ b/research/two-block-signatures/census_check.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python3 +"""Compare independent generic, binary and ternary censuses to the declared classification.""" +from collections import Counter +from dataclasses import astuple +from hashlib import sha256 +import json +from pathlib import Path +import sys + +PACKAGE = Path(__file__).resolve().parent +sys.path.insert(0,str(PACKAGE)) +from binary_oracle import enumerate_pairs +from construction_check import labeled_codes, need +from matching_oracle import census as generic_census +from signatures import TYPES, Profile, multiplicity, profiles, verdict +from ternary_oracle import census as ternary_census + + +def counts(key, n): + symbols = [(key >> (4*j)) & 15 for j in range(n)] + need(all(s in TYPES for s in symbols), "oracle reported a forbidden mask") + return tuple(symbols.count(s) for s in TYPES) + + +def digest(codes, n): + return sha256(b"".join(x.to_bytes((n+1)//2,"little") for x in sorted(codes))).hexdigest() + + +def full_gl4(): + tally = Counter() + for pattern in range(1<<16): + source = [(pattern >> (4*i)) & 15 for i in range(4)] + rows = [x | (16 << i) for i,x in enumerate(source)] + for j in range(4): + pivot = next((i for i in range(j,4) if rows[i] & (1<> 4 + r = int(bool(inverse_row & 3)) + 2*int(bool(inverse_row & 12)) + key += (4*s+r) << (4*j) + tally[key] += 1 + return tally + + +def binary_grids(): + grids, six = {}, {} + for n in range(2,7): + for p in range(1,n): + q = n-p + left, right, tally = enumerate_pairs(n,p) + need(set(tally) == labeled_codes(p,q,True), "binary space census disagrees") + need(sum(tally.values()) == left*(1 << (p*q)), "binary complement count") + grids[f"{p}+{q}"] = dict(first_spaces=left, second_spaces=right, pairs=sum(tally.values()), + codes=len(tally), code_sha256=digest(tally,n)) + if p == q == 2: + full = full_gl4() + need({k:36*v for k,v in tally.items()} == full, "full binary GL4 multiplicities") + if p == q == 3: + for key, amount in tally.items(): + row = counts(key,n) + if row in six: + need(six[row] == amount, "unequal binary counts under relabeling") + six[row] = amount # ordered space pairs per labeled signature + return grids, six + + +def generic_grids(): + out = {} + for p,q,chart in [(2,2,False),(1,5,True),(2,4,True),(3,3,True)]: + meta, raw = generic_census(p,q,chart) + expected = {astuple(v) for v in profiles(p+q) if verdict(p,q,v) == "ok"} + classes = {counts(key,p+q) for key in raw} + need(classes == expected, "generic perfect-matching profiles disagree") + need(sum(raw.values()) == meta["nonsingular"], "generic support multiplicities") + if not chart: + need(set(raw) == labeled_codes(p,q), "full four-port support patterns") + out[f"{p}+{q}"] = dict(**meta, chart=chart, fixed_order_codes=len(raw), + classes=len(classes), labeled_codes=sum(multiplicity(Profile(*k).symbols()) for k in classes)) + return out + + +def build_census(): + binary, pair2 = binary_grids() + ternary = {} + pair3 = {} + for d in (2,3): + summary, grouped = ternary_census(2*d,d) + expected = {astuple(v) for v in profiles(2*d) if verdict(d,d,v) == "ok"} + need(set(grouped) == expected, "ternary projective census disagrees") + ternary[f"{d}+{d}"] = dict(**summary, classes=len(grouped)) + for key, total in grouped.items(): + per_label, rem = divmod(total,multiplicity(Profile(*key).symbols())) + need(rem == 0 and per_label > 0, "ternary orbit multiplicity") + if d == 3: + pair3[key] = per_label + pairs = {k:(pair2.get(k,0),v) for k,v in pair3.items()} + report = {"binary":binary, "generic":generic_grids(), "ternary":ternary, + "literal_GL4_F2":20160, "all_mixed_six_port_pairs":list(pairs[(0,0,0,0,0,0,6)])} + return report, pairs + + +def main(): + report, pairs = build_census() + expected = json.loads((PACKAGE/"RESULT.json").read_bytes())["censuses"] + need(json.loads(json.dumps(report)) == expected, "stored census summary differs") + rows = json.loads((PACKAGE/"SIX-PORTS.json").read_bytes()) + observed = {tuple(r["counts"]):tuple(r["pairs_per_label_F2_F3"]) for r in rows} + need(len(rows) == len(observed) and pairs == observed, "stored per-label multiplicity differs") + print(json.dumps({"status":"PASS_TWO_BLOCK_INDEPENDENT_CENSUSES","result":report},sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/research/two-block-signatures/construction_check.py b/research/two-block-signatures/construction_check.py new file mode 100644 index 0000000000..51e1f41eb8 --- /dev/null +++ b/research/two-block-signatures/construction_check.py @@ -0,0 +1,143 @@ +"""Independent literal reading of every stored construction and the four-port handoff.""" +from dataclasses import astuple +from itertools import permutations +from math import factorial, prod + +from algebra import inverse, inverse_is_two_sided, masks +from counts import exceptions, ordinary_count +from signatures import Profile, code, multiplicity, profiles, verdict, witness + + +def need(ok, reason): + if not ok: + raise ValueError(reason) + + +def packed(matrix): + return ["".join("+" if v == 1 else "-" if v == -1 else "." if v == 0 else str(v) for v in row) + for row in matrix] + + +def validate_witness(p, q, symbols, field): + matrix = witness(p,q,symbols,field) + inv = inverse(matrix,field) + need(inv is not None, "constructed witness is singular") + need(inverse_is_two_sided(matrix,inv,field), "two-sided inverse") + need(masks(matrix,inv,p) == symbols, "literal witness has different masks") + return matrix + + +def construction_grid(): + summaries, six = {}, {} + for n in range(2,7): + for p in range(1,n): + q = n-p + stats = {"profiles":0,"signatures":0,"binary_profiles":0,"binary_signatures":0,"field_witnesses":0} + for v in profiles(n): + if verdict(p,q,v) != "ok": + continue + symbols = v.symbols() + ways = multiplicity(symbols) + stats["profiles"] += 1 + stats["signatures"] += ways + rational = validate_witness(p,q,symbols,"Q") + for field in ("F3","F4"): + validate_witness(p,q,symbols,field) + stats["field_witnesses"] += 3 + reason = verdict(p,q,v,True) + binary = None + if reason == "ok": + binary = validate_witness(p,q,symbols,"F2") + stats["binary_profiles"] += 1 + stats["binary_signatures"] += ways + stats["field_witnesses"] += 1 + if p == q == 3: + six[astuple(v)] = dict(multiplicity=ways, rational=packed(rational), + binary=packed(binary) if binary else None, binary_verdict=reason) + summaries[f"{p}+{q}"] = stats + return summaries, six + + +def labeled_codes(p, q, binary=False): + result = set() + for v in profiles(p+q): + if verdict(p,q,v,binary) == "ok": + for word in set(permutations(v.symbols())): + result.add(code(word)) + return result + + +def check_predecessor(package, retained): + lines = (package/"source/3997-TERNARY-SCREEN.txt").read_text(encoding="ascii").splitlines() + seen = set() + for line in lines[1:]: + fields = line.split() + claimed = int(fields[0],16) + vals = list(map(int,fields[1:])) + need(len(vals) == 16 and set(vals) <= {-1,0,1}, "four-port receipt row") + matrix = [vals[i:i+4] for i in range(0,16,4)] + inv = inverse(matrix,"Q") + need(inv is not None and code(masks(matrix,inv,2)) == claimed, "four-port receipt code") + seen.add(claimed) + binary = labeled_codes(2,2,True) + need(len(seen) == len(lines)-1 == retained["necessary_set_size"] and + seen == labeled_codes(2,2), "four-port rational codes") + need(len(binary) == retained["gl4_f2_signatures"] == 355 and + retained["predecessor_binding"]["receipt_codes"] == 439, "four-port field count") + header = dict(word.split("=") for word in lines[0].split()[1:]) + need(int(header["binary_signatures"]) == 391, "rational zero-one domain") + return {"actual_signed_witnesses":len(seen), "F2":len(binary), + "rational_zero_one_predecessor":int(header["binary_signatures"])} + + +def check_count_formulas(): + grids = 0 + for n in range(2,14): + factorial_n = factorial(n) + ordinary = [0]*n + losses = [{} for _ in range(n)] + for v in profiles(n): + mult = factorial_n // prod(factorial(k) for k in (v.aa,v.am,v.ma,v.bb,v.bm,v.mb,v.mm)) + for p in range(1,n): + if verdict(p,n-p,v) != "ok": + continue + ordinary[p] += mult + reason = verdict(p,n-p,v,True) + if reason != "ok": + losses[p][reason] = losses[p].get(reason,0) + mult + for p in range(1,n): + need(ordinary_count(p,n-p) == ordinary[p], "ordinary count formula differs") + expected = exceptions(p,n-p) + need(all(losses[p].get(k,0) == count for k,count in expected.items()), "exception count formula differs") + grids += 1 + large = {} + for d in (3,8,16,32): + total = ordinary_count(d,d) + excluded = exceptions(d,d) + large[str(d)] = dict(ordinary=total, binary=total-sum(excluded.values()), excluded=excluded) + return dict(exact_profile_grids=grids, balanced=large) + + +def rejection_controls(): + bad = ((1,1,(6,15),"Q"), (1,1,(9,15),"Q"), (1,1,(0,15),"Q"), + (0,2,(5,10),"Q"), (2,1,(5,10),"Q"), (1,1,(15,15),"F2"), + (2,2,(5,5,15,15),"Q"), (3,3,(7,7,13,13,15,15),"Q")) + for params in bad: + try: + witness(*params) + except ValueError: + continue + raise ValueError("impossible fixture unexpectedly constructed") + return len(bad) + + +def worked_example(): + matrix = ((0,0,1,0,0,1), (0,0,0,1,0,1), (0,0,0,0,1,1), + (1,0,0,0,0,0), (0,1,0,0,0,0), (0,0,1,1,1,1)) + symbols = (10,10,15,15,15,15) + for field in ("Q","F3"): + inv = inverse(matrix,field) + need(inv is not None and masks(matrix,inv,3) == symbols, "six-port zero-one example") + need(inverse(matrix,"F2") is None and verdict(3,3,Profile(0,0,0,2,0,0,4),True) == "binary one B", + "six-port zero-one field distinction") + return dict(matrix=packed(matrix), code=code(symbols), price=10) diff --git a/research/two-block-signatures/counts.py b/research/two-block-signatures/counts.py new file mode 100644 index 0000000000..9c54f18b3d --- /dev/null +++ b/research/two-block-signatures/counts.py @@ -0,0 +1,40 @@ +"""Exact labeled counts from pivot occupancies, without iterating seven-type profiles.""" +from math import comb + + +def both(k): + return 3**k - 2*(2**k) + 1 + + +def positions(n, left, right): + return comb(n,left) * comb(n-left,right) + + +def ordinary_count(p, q): + n = p+q + total = 0 + for left in range(p+1): + for right in range(q+1): + if left < p and right < q: + labels = 3**(left+right) + elif left == p and right < q: + labels = both(p) * 3**right + elif left < p and right == q: + labels = 3**left * both(q) + else: + labels = 1 + 2*(2**p-1)*(2**q-1) + both(p)*both(q) + total += positions(n,left,right) * labels + return total + + +def odd_side(p, q): + n = p+q + return sum(positions(n,p-1,q-v)*3**(q-v) for v in range(3,q+1,2)) + + +def exceptions(p, q): + """Three disjoint families of signatures absent over F2.""" + left, right = p-1, q-1 + choices = 3**left + 3**right + 2**(left+right+1) - 2**(left+1) - 2**(right+1) + 1 + corner = positions(p+q,left,right)*choices + return {"binary 1x1":corner, "binary one A":odd_side(p,q), "binary one B":odd_side(q,p)} diff --git a/research/two-block-signatures/label_check.py b/research/two-block-signatures/label_check.py new file mode 100644 index 0000000000..4b859f5642 --- /dev/null +++ b/research/two-block-signatures/label_check.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +"""Read every six-port labeled witness by a literal integer or binary elimination.""" +from collections import Counter +import json +from pathlib import Path +import sys + +PACKAGE = Path(__file__).resolve().parent +sys.path.insert(0,str(PACKAGE)) +from construction_check import labeled_codes, need +from signatures import witness + + +def scaled_inverse(matrix): + """Fraction-free Gauss-Jordan on [P | I]. A common scale suffices for all zero tests.""" + n = len(matrix) + rows = [list(row) + [int(i == j) for j in range(n)] for i,row in enumerate(matrix)] + previous = 1 + for k in range(n): + pivot_row = next((i for i in range(k,n) if rows[i][k]), None) + need(pivot_row is not None, "integer witness singular") + rows[k],rows[pivot_row] = rows[pivot_row],rows[k] + pivot = rows[k][k] + for i in range(n): + if i == k: + continue + old = rows[i] + new = [(pivot*x - old[k]*y)//previous for x,y in zip(old,rows[k],strict=True)] + rows[i] = new + previous = pivot + need(all(rows[i][:n] == [previous*int(i == j) for j in range(n)] for i in range(n)), + "fraction-free left block") + return previous, [row[n:] for row in rows] + + +def read_scaled(matrix, scale, right, modulus): + """Check P times the returned matrix equals scale times the identity over Z.""" + n = len(matrix) + need(all(sum(x*y for x,y in zip(row,col,strict=True)) == scale*int(i == j) + for j,col in enumerate(zip(*right,strict=True)) for i,row in enumerate(matrix)), + "scaled inverse product") + if modulus: + need(scale % modulus != 0, "witness singular modulo prime") + out = [] + for j in range(n): + s = int(any(matrix[i][j] for i in range(3))) + 2*int(any(matrix[i][j] for i in range(3,n))) + vals = [x % modulus if modulus else x for x in right[j]] + r = int(any(vals[:3])) + 2*int(any(vals[3:])) + out.append(4*s+r) + return tuple(out) + + +def binary_masks(matrix): + rows = [sum(x<>j)&1), None) + need(i is not None, "labeled binary witness singular") + rows[i],rows[j] = rows[j],rows[i] + for k in range(6): + if k != j and (rows[k]>>j)&1: + rows[k] ^= rows[j] + result = [] + for j in range(6): + s = int(any(row[j] for row in matrix[:3])) + 2*int(any(row[j] for row in matrix[3:])) + inverse_row = rows[j] >> 6 + r = int(bool(inverse_row & 7)) + 2*int(bool(inverse_row & 56)) + result.append(4*s+r) + return tuple(result) + + +def recount(): + rational = labeled_codes(3,3) + binary = labeled_codes(3,3,True) + determinants = Counter() + for key in sorted(rational): + symbols = tuple((key >> (4*j)) & 15 for j in range(6)) + for label, modulus in (("Q",0),("F3",3)): + mat = witness(3,3,symbols,label) + scale, right = scaled_inverse(mat) + need(read_scaled(mat,scale,right,modulus) == symbols, "labeled masks differ") + if not modulus: + determinants[abs(scale)] += 1 + if key in binary: + need(binary_masks(witness(3,3,symbols,"F2")) == symbols, "labeled binary masks differ") + return dict(rational=len(rational), F3=len(rational), F2=len(binary), + rational_abs_determinants=dict(sorted(determinants.items()))) + + +if __name__ == "__main__": + actual = json.loads(json.dumps(recount())) + expected = json.loads((PACKAGE/"RESULT.json").read_bytes())["labeled_witnesses"] + need(actual == expected, "stored labeled witness receipt differs") + print(json.dumps({"status":"PASS_TWO_BLOCK_LABELED_WITNESSES","result":actual},sort_keys=True)) diff --git a/research/two-block-signatures/matching_oracle.py b/research/two-block-signatures/matching_oracle.py new file mode 100644 index 0000000000..2a0c76764c --- /dev/null +++ b/research/two-block-signatures/matching_oracle.py @@ -0,0 +1,78 @@ +"""Generic support screens using perfect matchings of determinants and cofactors. + +Every integer bit position represents one support pattern. This module uses no +complementary-space incidence tests or constructive witness from the theorem. +""" +from itertools import permutations + + +def support_bits(variable_count): + size = 1 << variable_count + full = (1 << size)-1 + stripes = [] + for k in range(variable_count): + span = 1 << k + repeat = full // ((1 << (2*span))-1) + stripes.append((repeat*((1 << span)-1)) << span) + return full, stripes + + +def matching_screen(p, q, chart): + n = p+q + variable = {} + fixed = set() + for i in range(n): + for j in range(n): + if not chart or (i < p) != (j < p): + variable[i,j] = len(variable) + elif i == j: + fixed.add((i,j)) + if len(variable) > 18: + raise ValueError("explicit bitset census capped at eighteen variables") + full, stripes = support_bits(len(variable)) + edges = [[full if (i,j) in fixed else stripes[variable[i,j]] if (i,j) in variable else 0 + for j in range(n)] for i in range(n)] + det = 0 + cofactors = [[0]*n for _ in range(n)] + for perm in permutations(range(n)): + prefix = [full] + for i,j in enumerate(perm): + prefix.append(prefix[-1] & edges[i][j]) + det |= prefix[-1] + suffix = full + for i in reversed(range(n)): + j = perm[i] + cofactors[j][i] |= prefix[i] & suffix + suffix &= edges[i][j] + return det, edges, cofactors, len(variable) + + +def union(bits): + result = 0 + for x in bits: + result |= x + return result + + +def census(p, q, chart=True): + det, edges, inverse, variables = matching_screen(p, q, chart) + states = {0: det} + for j in range(p+q): + sa = union(row[j] for row in edges[:p]) + sb = union(row[j] for row in edges[p:]) + ra = union(inverse[j][:p]) + rb = union(inverse[j][p:]) + source = (sa & ~sb, sb & ~sa, sa & sb) + reader = (ra & ~rb, rb & ~ra, ra & rb) + next_states = {} + for s, src in enumerate(source, 1): + for r, rd in enumerate(reader, 1): + selector = src & rd + digit = (4*s+r) << (4*j) + for key, bits in states.items(): + compatible = bits & selector + if compatible: + next_states[key+digit] = compatible + states = next_states + return dict(variables=variables, patterns=1 << variables, nonsingular=det.bit_count()), { + key: bits.bit_count() for key,bits in states.items()} diff --git a/research/two-block-signatures/signatures.py b/research/two-block-signatures/signatures.py new file mode 100644 index 0000000000..4701c77348 --- /dev/null +++ b/research/two-block-signatures/signatures.py @@ -0,0 +1,103 @@ +"""Construct two-block support signatures. SHIN09-git with OpenAI Codex assistance, Apache-2.0.""" +from dataclasses import dataclass +from math import comb + +# A=1, B=2, M=3. Each nibble is 4*source+reader, as in PR3997. +AA, AM, MA, BB, BM, MB, MM = 5, 7, 13, 10, 11, 14, 15 +TYPES = (AA, AM, MA, BB, BM, MB, MM) + + +@dataclass(frozen=True) +class Profile: + aa: int + am: int + ma: int + bb: int + bm: int + mb: int + mm: int + + def symbols(self): + counts = (self.aa, self.am, self.ma, self.bb, self.bm, self.mb, self.mm) + return tuple(s for s, count in zip(TYPES, counts, strict=True) for _ in range(count)) + + def free(self, p, q): + return p-self.aa-self.am-self.ma, q-self.bb-self.bm-self.mb + + +def profiles(n, prefix=()): + if len(prefix) == 6: + yield Profile(*prefix, n) + return + for k in range(n+1): + yield from profiles(n-k, prefix+(k,)) + + +def multiplicity(symbols): + total, ways = len(symbols), 1 + for s in TYPES: + count = symbols.count(s) + ways *= comb(total, count) + total -= count + return ways + + +def verdict(p, q, v, binary=False): + """Assumes the seven valid symbol types, nonnegative counts and total p+q.""" + u, w = v.free(p, q) + if u < 0 or w < 0: + return "capacity" + if (p-v.aa-v.ma == 0) != (q-v.bb-v.bm == 0): + return "A saturation" + if (q-v.bb-v.mb == 0) != (p-v.aa-v.am == 0): + return "B saturation" + if not binary or u*w % 2 == 0 or min(u,w) > 1: + return "ok" + if u == w == 1: + return "ok" if (v.am and v.mb) or (v.ma and v.bm) else "binary 1x1" + if u == 1: + return "ok" if v.am or v.ma else "binary one A" + return "ok" if v.mb or v.bm else "binary one B" + + +def describe(p, q, symbols): + if type(p) is not int or type(q) is not int or min(p,q) < 1 or len(symbols) != p+q: + raise ValueError("two positive block sizes must sum to signature length") + if any(type(s) is not int or s not in TYPES for s in symbols): + raise ValueError("forbidden source-reader type") + return Profile(*(symbols.count(s) for s in TYPES)) + + +def witness(p, q, symbols, field="Q"): + """Rows are A pivots followed by B pivots. Columns keep the supplied labels.""" + v = describe(p, q, symbols) + if field not in ("Q", "F2", "F3", "F4"): + raise ValueError("unsupported witness field") + why = verdict(p, q, v, binary=field == "F2") + if why != "ok": + raise ValueError(why) + u, w = v.free(p, q) + free = [j for j, s in enumerate(symbols) if s == MM] + left = [j for j, s in enumerate(symbols) if s in (AA, AM, MA)] + free[:u] + right = [j for j, s in enumerate(symbols) if s in (BB, BM, MB)] + free[u:] + n = p+q + rows = [[int(j == i) for j in range(n)] for i in left+right] + scalar = {"Q": -1, "F2": 1, "F3": 2 if u*w%3 == 1 else 1, + "F4": 2 if u*w%2 else 1}[field] + for i, ix in enumerate(left): + for j, jx in enumerate(right): + rows[i][jx] = int(symbols[ix] % 4 != 1 and symbols[jx] // 4 != 2) + rows[p+j][ix] = scalar*int(symbols[jx] % 4 != 2 and symbols[ix] // 4 != 1) + if field == "F2" and u*w % 2: + ix, jx = free[0], free[u] + remove_x = ((u > 1 and w > 1) or (u == 1 and w > 1 and v.am > 0) + or (w == 1 and u > 1 and v.mb > 0) or (u == w == 1 and v.am*v.mb > 0)) + if remove_x: + rows[left.index(ix)][jx] = 0 + else: + rows[p+right.index(jx)][ix] = 0 + return tuple(tuple(row) for row in rows) + + +def code(symbols): + return sum(s << (4*j) for j,s in enumerate(symbols)) diff --git a/research/two-block-signatures/tariffs.py b/research/two-block-signatures/tariffs.py new file mode 100644 index 0000000000..cafbf173c2 --- /dev/null +++ b/research/two-block-signatures/tariffs.py @@ -0,0 +1,87 @@ +"""Check exact price certificates and the field-dependent tariff without an LP solver.""" +from dataclasses import astuple +from itertools import combinations +from signatures import profiles, verdict + + +def dot(left, right): + return sum(x*y for x,y in zip(left,right,strict=True)) + + +def check_certificates(records): + binary = {astuple(v) for v in profiles(6) if verdict(3,3,v,True) == "ok"} + missing = {astuple(v) for v in profiles(6) if verdict(3,3,v) == "ok"} - binary + seen = set() + outside = 0 + for record in records: + row = tuple(record["counts"]) + if row not in missing or row in seen: + raise ValueError("price certificate profile") + seen.add(row) + if "prices" in record: + prices = record["prices"] + if not all(type(c) is int and c > 0 for c in prices): + raise ValueError("positive integral tariff") + if min(dot(prices,y) for y in binary) <= dot(prices,row): + raise ValueError("price does not strictly separate") + outside += 1 + else: + mix = [(entry["weight"],tuple(entry["counts"])) for entry in record["mixture"]] + if not mix or any(type(w) is not int or w < 1 or y not in binary for w,y in mix): + raise ValueError("invalid binary price mixture") + total = sum(w for w,_ in mix) + if any(sum(w*y[i] for w,y in mix) != total*row[i] for i in range(7)): + raise ValueError("convex combination differs from profile") + if seen != missing: + raise ValueError("incomplete price certificate list") + return {"separated":outside, "in_binary_convex_hull":len(seen)-outside} + + +def parity_family(): + rows = [] + for d in range(2,9): + regular, binary = 20*d, 20*d + for v in profiles(2*d): + if verdict(d,d,v) != "ok": + continue + price = dot(astuple(v), (3,3,3,1,2,2,2)) + regular = min(regular,price) + if verdict(d,d,v,True) == "ok": + binary = min(binary,price) + if regular != 3*d+1 or binary != regular + (d % 2): + raise ValueError("parity tariff minima") + rows.append([d,regular,binary]) + return rows + + +def literal_prices(codes, binary_codes, p, n): + """Exhaust all actual six-port signatures for label-dependent monotone fees.""" + receipts = [] + for seed in range(12): + tariffs = [] + for j in range(n): + # Nonnegative weights on source, reader and source-reader indicators. + s_weights = [(3*j+seed+2)%11, (j*j+2*seed+1)%13] + r_weights = [(2*j+3*seed+1)%7, (4*j+seed+4)%11] + row = [0]*16 + for s in (1,2,3): + for r in (1,2,3): + value = sum(s_weights[i] for i in range(2) if s & (1<> (4*j)) & 15] for j,row in enumerate(tariffs)) + best_any = min(best_any,fee) + if code in binary_codes: + best_binary = min(best_binary,fee) + if not (optimum == min(assignments) == best_any == best_binary): + raise ValueError("message-dependent monotone tariff") + receipts.append(optimum) + return receipts diff --git a/research/two-block-signatures/ternary_oracle.py b/research/two-block-signatures/ternary_oracle.py new file mode 100644 index 0000000000..d954bb01b5 --- /dev/null +++ b/research/two-block-signatures/ternary_oracle.py @@ -0,0 +1,106 @@ +"""Count all 3+3 complementary space pairs over F3, quotienting the first space by monomial symmetries.""" +from array import array +from collections import Counter +from itertools import combinations, product + + +def geometry(n): + size = 3**n + digits = [tuple((v//(3**j))%3 for j in range(n)) for v in range(size)] + add = [] + for x in range(size): + row = array("H", (0 for _ in range(size))) + add.append(row) + for y in range(size): + row[y] = (x%3+y%3)%3 + 3*add[x//3][y//3] + negative = [add[v][v] for v in range(size)] + reps = [v for v in range(1,size) if v < negative[v]] + point = {v:i for i,u in enumerate(reps) for v in (u,negative[u])} + generators = [] + for move in range(n): + mapping = [] + for v in reps: + coord = list(digits[v]) + if move == n-1: + coord[0] = -coord[0] % 3 + else: + coord[move], coord[move+1] = coord[move+1], coord[move] + target = sum(x*3**j for j,x in enumerate(coord)) + mapping.append(1 << point[target]) + generators.append(mapping) + return digits, add, negative, point, generators + + +def enumerate_spaces(n, d, digits, add, negative, point): + out = {} + for pivots in combinations(range(n),d): + cells = [(i,3**j) for i,p in enumerate(pivots) for j in range(p+1,n) if j not in pivots] + for values in product(range(3),repeat=len(cells)): + basis = [3**j for j in pivots] + for (i,power),value in zip(cells,values,strict=True): + basis[i] += value*power + words = [0] + for row in basis: + words += [add[row][x] for x in words] + [add[negative[row]][x] for x in words] + lines = tuple(sorted({point[word] for word in words if word})) + bits = sum(1 << x for x in lines) + support = sum(any(digits[row][j] for row in basis) << j for j in range(n)) + axes = sum(bool(bits & (1 << point[3**j])) << j for j in range(n)) + if bits in out: + raise ValueError("duplicate ternary RREF space") + out[bits] = (lines,support,axes) + return out + + +def orbit_representatives(spaces, generators): + seen = set() + for start in spaces: + if start in seen: + continue + seen.add(start) + orbit = [start] + for v in orbit: + lines = spaces[v][0] + for mapping in generators: + child = sum(mapping[j] for j in lines) + if child not in spaces: + raise ValueError("monomial image missing") + if child not in seen: + seen.add(child) + orbit.append(child) + yield start, len(orbit) + + +def census(n=6, d=3): + if n != 2*d or n not in (4,6): + raise ValueError("ternary exhaustive oracle is bounded to 2+2 and 3+3") + digits, add, negative, point, generators = geometry(n) + spaces = enumerate_spaces(n,d,digits,add,negative,point) + # The finite oracle uses only projective-point intersections and elementary + # coordinate incidence. The algebraic feasibility criterion is not imported. + total = Counter() + orbit_sizes = [] + symbols = (5,7,13,10,11,14,15) + for a, weight in orbit_representatives(spaces,generators): + orbit_sizes.append(weight) + sa, ea = spaces[a][1:] + complement_count = 0 + per_rep = Counter() + for b, (_,sb,eb) in spaces.items(): + if a & b: + continue + complement_count += 1 + masks = tuple(4*(((sa>>j)&1) + 2*((sb>>j)&1)) + + (1-((eb>>j)&1)) + 2*(1-((ea>>j)&1)) for j in range(n)) + per_rep[tuple(masks.count(s) for s in symbols)] += 1 + if complement_count != 3**(d*d): + raise ValueError("ternary complement multiplicity") + for key, count in per_rep.items(): + total[key] += weight*count + if sum(orbit_sizes) != len(spaces): + raise ValueError("incomplete monomial partition") + if sum(total.values()) != len(spaces)*3**(d*d): + raise ValueError("ternary total pair count") + return {"spaces":len(spaces), "first_space_orbits":len(orbit_sizes), + "orbit_size_histogram":dict(sorted(Counter(orbit_sizes).items())), + "ordered_pairs":sum(total.values())}, total diff --git a/research/two-block-signatures/verify.py b/research/two-block-signatures/verify.py new file mode 100644 index 0000000000..c8340667d3 --- /dev/null +++ b/research/two-block-signatures/verify.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +"""Exact constructive replay. SHIN09-git with OpenAI Codex assistance. Apache-2.0.""" +import hashlib +import json +from pathlib import Path +import sys + +PACKAGE = Path(__file__).resolve().parent +sys.path.insert(0,str(PACKAGE)) +from construction_check import (check_count_formulas, check_predecessor, construction_grid, + labeled_codes, need, rejection_controls, worked_example) +from tariffs import check_certificates, literal_prices, parity_family + + +PINS = { + "source/6691-README.md":"0cbcb749f758e2b8badf6bd5a87512b4b709331c894f0bcdb3126e1002df3e09", + "source/6691-PROOF.md":"a6db4dfce4ece302678e9c94e63bc85b550e976d056f273378c25b792cd09b6d", + "source/6691-RESULT.json":"e8fd2b58ed9c2e359d20c11d0885014058f8567219bfc6aa5ce692e1c6ac17d7", + "source/3997-TERNARY-SCREEN.txt":"ded4c54c486864dd3d3c2084bbb15f471bb7926af21f6d0c8a4582312a1001ac", + "source/LICENSE":"c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", +} + + +def read(name): + return json.loads((PACKAGE/name).read_bytes()) + + +def construct(): + files = read("SOURCES.json")["files"] + for name, digest in PINS.items(): + rows = [r for r in files if r.get("vendored_as") == name] + actual = hashlib.sha256((PACKAGE/name).read_bytes()).hexdigest() + need(len(rows) == 1 and actual == digest == rows[0]["sha256"], "retained source hash") + baseline = check_predecessor(PACKAGE,read("source/6691-RESULT.json")) + grids, six = construction_grid() + regular = labeled_codes(3,3) + binary = labeled_codes(3,3,True) + need(len(regular) == 33727 and len(binary) == 30547, "six-port labeled counts") + summary = dict(four_port_control=baseline, grids=grids, invalid_cases=rejection_controls(), + tariff_certificates=check_certificates(read("PRICE-CERTIFICATES.json")), + parity_tariffs=parity_family(), monotone_prices=literal_prices(regular,binary,3,6), + closed_counts=check_count_formulas(), zero_one_example=worked_example()) + return summary, six + + +def main(): + summary, witnesses = construct() + rows = read("SIX-PORTS.json") + actual = {tuple(r["counts"]):{k:v for k,v in r.items() if k not in ("counts","pairs_per_label_F2_F3")} for r in rows} + need(len(rows) == len(actual) and witnesses == actual, "stored witness certificate differs") + need(summary == read("RESULT.json")["construction"], "stored construction summary differs") + print(json.dumps({"status":"PASS_TWO_BLOCK_SIGNATURES","result":summary},sort_keys=True)) + + +if __name__ == "__main__": + main() From ac229dcfeb3b8217c1fdc9f32da3add5ef207880 Mon Sep 17 00:00:00 2001 From: SHIN09-git Date: Wed, 4 Nov 2026 12:17:36 +0800 Subject: [PATCH 3/4] Distinguish rational zero-one bases from binary-field signatures --- research/two-block-signatures/README.md | 5 +- research/two-block-signatures/SOURCES.json | 6 + research/two-block-signatures/VALIDATION.md | 4 +- research/two-block-signatures/VERIFY.json | 14 +- research/two-block-signatures/ZERO-ONE.json | 199 ++++++++++++++++++ research/two-block-signatures/ZERO-ONE.md | 14 ++ .../two-block-signatures/audit_mutations.py | 8 +- .../two-block-signatures/zero_one_census.py | 173 +++++++++++++++ 8 files changed, 418 insertions(+), 5 deletions(-) create mode 100644 research/two-block-signatures/ZERO-ONE.json create mode 100644 research/two-block-signatures/ZERO-ONE.md create mode 100644 research/two-block-signatures/zero_one_census.py diff --git a/research/two-block-signatures/README.md b/research/two-block-signatures/README.md index e1f8b4f9b3..89a611aa7f 100644 --- a/research/two-block-signatures/README.md +++ b/research/two-block-signatures/README.md @@ -7,8 +7,11 @@ A signature records which blocks a message uses on input and which blocks read i | Two blocks of three ports | Up to relabeling messages | Labeled signatures | | --- | ---: | ---: | | Rational, generic or any field with more than two elements | 188 | 33,727 | +| Zero-one entries with rational inversion | 179 | 32,287 | | Two-element field | 167 | 30,547 | -| Difference | 21 | 3,180 | +| Ordinary minus two-element field | 21 | 3,180 | + +In the middle row the basis entries are restricted. The rational inverse can use other coefficients. An exact weighted census accounts for 28,836,612,000 invertible zero-one matrices. [Restricted coefficient census](ZERO-ONE.md) ## What determines a signature diff --git a/research/two-block-signatures/SOURCES.json b/research/two-block-signatures/SOURCES.json index 129cf41c20..6f80da194d 100644 --- a/research/two-block-signatures/SOURCES.json +++ b/research/two-block-signatures/SOURCES.json @@ -93,6 +93,12 @@ "year": 1967, "url": "https://nvlpubs.nist.gov/nistpubs/jres/71B/jresv71Bn4p241_A1b.pdf", "role": "Classical generic determinant/matching correspondence, applied also to cofactors." + }, + { + "title": "Classification of small (0,1) matrices", + "author": "Miodrag Živković", + "url": "https://arxiv.org/abs/math/0511636", + "role": "Prior nonsingular matrix count. The source/reader classification and per-profile multiplicities are separate." } ] } diff --git a/research/two-block-signatures/VALIDATION.md b/research/two-block-signatures/VALIDATION.md index 92930cdd45..c8c7ededb2 100644 --- a/research/two-block-signatures/VALIDATION.md +++ b/research/two-block-signatures/VALIDATION.md @@ -9,6 +9,7 @@ The general claim is a written proof. The checks below use exact arithmetic and | All six-port labels | Build and invert all 33,727 rational and 33,727 ternary witnesses, and all 30,547 binary witnesses, in their supplied label order. For the rational and ternary cases the second implementation uses integer fraction-free elimination, verifies the scaled inverse product and then reads the masks | | Generic perfect matchings | All 65,536 unrestricted four-port supports. The 37,823 structurally invertible ones give exactly the predecessor's 439 codes. All 262,144 six-port 3+3 graph-chart supports yield 2,500 codes for that fixed pivot labeling and 188 profiles under arbitrary relabeling | | Binary spaces | Enumerate both reduced row-echelon spaces and intersect their actual vector sets for every block split through six ports. At 3+3, all 714,240 complementary pairs among 1,395 three-spaces give exactly the 30,547 predicted codes. At 2+2, enumeration of all 65,536 binary matrices independently recovers all 20,160 invertible matrices, including every code's multiplicity | +| Zero-one entries over Q | A separate census covers all 28,836,612,000 invertible six-port zero-one matrices. They give 179 profiles and 32,287 labels. Exact four-port cofactors check the whole small histogram | | Ternary spaces | Enumerate all 33,880 three-spaces in six coordinates. Coordinate permutations and sign changes partition the first space into 31 orbits. For each representative, test every possible second space using projective-line intersections. With exact orbit weights, all 666,860,040 ordered complementary pairs give precisely the 188 predicted profiles. The two-port control accounts for 10,530 complementary pairs in four coordinates | | Closed formulas | The ordinary count and the three separate binary deficits agree with weighted seven-type enumeration for all 78 splits of sizes 2–13. Larger balanced values, including 32+32, are in RESULT.json | | Tariffs | Twelve label-dependent monotone price tables are checked on every six-port signature. The nonmonotone parity family is independently minimized at balanced sizes 2–8. The 21 rational certificates cover every missing binary profile and use exact integer inequalities or convex weights | @@ -29,10 +30,11 @@ python3.12 -I -O -W error -B research/two-block-signatures/verify.py python3.12 -I -W error -B research/two-block-signatures/census_check.py python3.12 -I -O -W error -B research/two-block-signatures/census_check.py python3.12 -I -W error -B research/two-block-signatures/label_check.py +python3.12 -I -W error -B research/two-block-signatures/zero_one_census.py python3.12 -I -W error -B research/two-block-signatures/audit_mutations.py ``` -Markers are `PASS_TWO_BLOCK_SIGNATURES`, `PASS_TWO_BLOCK_INDEPENDENT_CENSUSES`, `PASS_TWO_BLOCK_LABELED_WITNESSES` and `PASS_TWO_BLOCK_MUTATIONS`. The fault audit starts with four private-copy positive controls. Twenty actual substitutions are rejected for their named reasons under both interpreter modes. They include losing pivot capacity, relaxing an isolated binary entry, transposing the cofactor, treating four elements as two, ignoring an orbit weight, corrupting a price certificate and altering a retained source. Normal and optimized scientific receipts agree. +Markers are `PASS_TWO_BLOCK_SIGNATURES`, `PASS_TWO_BLOCK_INDEPENDENT_CENSUSES`, `PASS_TWO_BLOCK_LABELED_WITNESSES`, `PASS_TWO_BLOCK_ZERO_ONE_Q` and `PASS_TWO_BLOCK_MUTATIONS`. The fault audit starts with six private-copy positive controls. Twenty-two actual substitutions are rejected for their named reasons under both interpreter modes. They include losing pivot capacity, relaxing an isolated binary entry, transposing the cofactor, treating four elements as two, ignoring an orbit weight, reducing rational determinants modulo two, corrupting a price certificate and altering a retained source. Normal and optimized scientific receipts agree. All scientific entry points are standalone, work on read-only package files and need no network or Git executable. In a full Git checkout the source-history check runs separately. diff --git a/research/two-block-signatures/VERIFY.json b/research/two-block-signatures/VERIFY.json index fa273b805a..8c5b960ca9 100644 --- a/research/two-block-signatures/VERIFY.json +++ b/research/two-block-signatures/VERIFY.json @@ -67,6 +67,18 @@ "timeout_seconds": 150, "checks": "Literally invert every labeled six-port witness over Q and F3, and every available F2 witness." }, + { + "argv": [ + "{python}", + "-I", + "-W", + "error", + "-B", + "{package}/zero_one_census.py" + ], + "timeout_seconds": 100, + "checks": "Exact rational zero-one coefficient census using weighted row bases, maximal minors and retained six-port witnesses." + }, { "argv": [ "{python}", @@ -77,7 +89,7 @@ "{package}/audit_mutations.py" ], "timeout_seconds": 300, - "checks": "Four private-copy positive controls. Twenty concrete faults rejected for specified reasons in normal and optimized interpreters." + "checks": "Six private-copy positive controls. Twenty-two concrete faults rejected for specified reasons in normal and optimized interpreters." } ] } diff --git a/research/two-block-signatures/ZERO-ONE.json b/research/two-block-signatures/ZERO-ONE.json new file mode 100644 index 0000000000..96e2cde106 --- /dev/null +++ b/research/two-block-signatures/ZERO-ONE.json @@ -0,0 +1,199 @@ +{ + "four_port": { + "spaces": 55, + "first_space_orbits": 7, + "ordered_space_pairs": 1680, + "invertible_matrices": 22560, + "profiles": 30, + "signatures": 391 + }, + "six_port": { + "spaces": 11445, + "first_space_orbits": 72, + "ordered_space_pairs": 81939900, + "invertible_matrices": 28836612000, + "profiles": 179, + "signatures": 32287 + }, + "profiles": [ + {"counts":[0,0,0,0,0,0,6],"matrices_per_label":3459385440,"matrix":["110000","101000","000111","011000","000110","100101"]}, + {"counts":[0,0,0,0,0,1,5],"matrices_per_label":206118000,"matrix":["110000","101000","000111","100000","000110","011101"]}, + {"counts":[0,0,0,0,0,2,4],"matrices_per_label":5032080,"matrix":["001100","001010","110001","100000","010000","001111"]}, + {"counts":[0,0,0,0,1,0,5],"matrices_per_label":322000560,"matrix":["011000","010100","000011","001100","010010","100001"]}, + {"counts":[0,0,0,0,1,1,4],"matrices_per_label":22405392,"matrix":["011000","010100","000011","010000","001010","100101"]}, + {"counts":[0,0,0,0,1,2,3],"matrices_per_label":835200,"matrix":["010100","010010","001001","010000","001000","100111"]}, + {"counts":[0,0,0,0,2,0,4],"matrices_per_label":13347648,"matrix":["001100","001010","001001","000110","101000","010001"]}, + {"counts":[0,0,0,0,2,1,3],"matrices_per_label":997920,"matrix":["001100","001010","001001","001000","100100","010011"]}, + {"counts":[0,0,0,1,0,0,5],"matrices_per_label":19040400,"matrix":["011000","010100","000011","010010","001101","100000"]}, + {"counts":[0,0,0,1,0,1,4],"matrices_per_label":547056,"matrix":["001100","001010","010001","010000","001111","100000"]}, + {"counts":[0,0,0,1,1,0,4],"matrices_per_label":984240,"matrix":["001100","001010","001001","000110","100000","011001"]}, + {"counts":[0,0,0,1,1,1,3],"matrices_per_label":45936,"matrix":["001100","001010","001001","001000","100000","010111"]}, + {"counts":[0,0,0,2,0,0,4],"matrices_per_label":20880,"matrix":["001100","001010","001001","001111","100000","010000"]}, + {"counts":[0,0,1,0,0,0,5],"matrices_per_label":206118000,"matrix":["100000","011000","000111","110000","000110","001101"]}, + {"counts":[0,0,1,0,0,1,4],"matrices_per_label":11508480,"matrix":["100000","011000","000111","010000","000110","101101"]}, + {"counts":[0,0,1,0,0,2,3],"matrices_per_label":225504,"matrix":["100000","000110","011101","010000","001000","100111"]}, + {"counts":[0,0,1,0,1,0,4],"matrices_per_label":62280576,"matrix":["100000","001100","000011","101000","100010","010101"]}, + {"counts":[0,0,1,0,1,1,3],"matrices_per_label":4352616,"matrix":["100000","001100","000011","001000","100010","010101"]}, + {"counts":[0,0,1,0,1,2,2],"matrices_per_label":185832,"matrix":["100000","001010","000101","001000","000100","110011"]}, + {"counts":[0,0,1,0,2,0,3],"matrices_per_label":7159968,"matrix":["100000","000110","000101","100100","110000","001011"]}, + {"counts":[0,0,1,0,2,1,2],"matrices_per_label":544320,"matrix":["100000","000110","000101","000100","110000","001011"]}, + {"counts":[0,0,1,1,0,0,4],"matrices_per_label":3338496,"matrix":["100000","001100","000011","001010","101101","010000"]}, + {"counts":[0,0,1,1,0,1,3],"matrices_per_label":75168,"matrix":["100000","000110","001101","001000","100111","010000"]}, + {"counts":[0,0,1,1,1,0,3],"matrices_per_label":523584,"matrix":["100000","000110","000101","100100","010000","001011"]}, + {"counts":[0,0,1,1,1,1,2],"matrices_per_label":25056,"matrix":["100000","000110","000101","000100","010000","101011"]}, + {"counts":[0,0,1,2,0,0,3],"matrices_per_label":25056,"matrix":["100000","000110","000101","100111","010000","001000"]}, + {"counts":[0,0,2,0,0,0,4],"matrices_per_label":5032080,"matrix":["100000","010000","001111","101000","000110","010101"]}, + {"counts":[0,0,2,0,0,1,3],"matrices_per_label":225504,"matrix":["100000","010000","001111","001000","000110","110101"]}, + {"counts":[0,0,2,0,1,0,3],"matrices_per_label":7011504,"matrix":["100000","010000","000111","100100","100010","011001"]}, + {"counts":[0,0,2,0,1,1,2],"matrices_per_label":507384,"matrix":["100000","010000","000111","000100","100010","011001"]}, + {"counts":[0,0,2,0,1,2,1],"matrices_per_label":30276,"matrix":["100000","010000","000111","000100","000010","111001"]}, + {"counts":[0,0,2,0,2,0,2],"matrices_per_label":7882200,"matrix":["100000","010000","000011","100010","101000","010101"]}, + {"counts":[0,0,2,0,2,1,1],"matrices_per_label":657720,"matrix":["100000","010000","000011","000010","101000","010101"]}, + {"counts":[0,0,2,1,0,0,3],"matrices_per_label":225504,"matrix":["100000","010000","000111","000110","110101","001000"]}, + {"counts":[0,0,2,1,1,0,2],"matrices_per_label":507384,"matrix":["100000","010000","000011","100010","001000","010101"]}, + {"counts":[0,0,2,1,1,1,1],"matrices_per_label":30276,"matrix":["100000","010000","000011","000010","001000","110101"]}, + {"counts":[0,0,3,0,3,0,0],"matrices_per_label":8320680,"matrix":["100000","010000","001000","100100","100010","011001"]}, + {"counts":[0,0,3,1,2,0,0],"matrices_per_label":657720,"matrix":["100000","010000","001000","000100","100010","011001"]}, + {"counts":[0,0,3,2,1,0,0],"matrices_per_label":30276,"matrix":["100000","010000","001000","000100","000010","111001"]}, + {"counts":[0,1,0,0,0,0,5],"matrices_per_label":322000560,"matrix":["011000","010100","100011","001100","010010","010001"]}, + {"counts":[0,1,0,0,0,1,4],"matrices_per_label":62280576,"matrix":["011000","010100","100011","010000","001010","000101"]}, + {"counts":[0,1,0,0,0,2,3],"matrices_per_label":7011504,"matrix":["010100","010010","101001","010000","001000","000111"]}, + {"counts":[0,1,0,0,1,0,4],"matrices_per_label":27841104,"matrix":["001100","001010","100001","000110","001001","011000"]}, + {"counts":[0,1,0,0,1,1,3],"matrices_per_label":5979096,"matrix":["001100","001010","100001","001000","000101","010010"]}, + {"counts":[0,1,0,0,1,2,2],"matrices_per_label":835200,"matrix":["001010","001001","100100","001000","000100","010011"]}, + {"counts":[0,1,0,0,2,0,3],"matrices_per_label":1118880,"matrix":["000110","000101","100100","000011","010100","001100"]}, + {"counts":[0,1,0,0,2,1,2],"matrices_per_label":281952,"matrix":["000110","000101","100100","000100","010010","001001"]}, + {"counts":[0,1,0,1,0,0,4],"matrices_per_label":5345568,"matrix":["001100","001010","100001","000110","001001","010000"]}, + {"counts":[0,1,0,1,0,1,3],"matrices_per_label":691128,"matrix":["001100","001010","100001","001000","000111","010000"]}, + {"counts":[0,1,0,1,1,0,3],"matrices_per_label":234792,"matrix":["000110","000101","100100","000011","010000","001100"]}, + {"counts":[0,1,0,1,1,1,2],"matrices_per_label":45936,"matrix":["000110","000101","100100","000100","010000","001011"]}, + {"counts":[0,1,0,2,0,0,3],"matrices_per_label":39672,"matrix":["000110","000101","100100","000111","010000","001000"]}, + {"counts":[0,1,1,0,0,0,4],"matrices_per_label":22405392,"matrix":["010000","001100","100011","011000","010010","000101"]}, + {"counts":[0,1,1,0,0,1,3],"matrices_per_label":4352616,"matrix":["010000","001100","100011","001000","010010","000101"]}, + {"counts":[0,1,1,0,0,2,2],"matrices_per_label":507384,"matrix":["010000","001010","100101","001000","000100","010011"]}, + {"counts":[0,1,1,0,1,0,3],"matrices_per_label":5979096,"matrix":["010000","000110","100001","010100","010001","001010"]}, + {"counts":[0,1,1,0,1,1,2],"matrices_per_label":1330776,"matrix":["010000","000110","100001","000100","010001","001010"]}, + {"counts":[0,1,1,0,1,2,1],"matrices_per_label":185832,"matrix":["010000","000101","100010","000100","000010","011001"]}, + {"counts":[0,1,1,0,2,0,2],"matrices_per_label":643392,"matrix":["010000","000011","100010","010010","011000","000101"]}, + {"counts":[0,1,1,0,2,1,1],"matrices_per_label":153792,"matrix":["010000","000011","100010","000010","011000","000101"]}, + {"counts":[0,1,1,1,0,0,3],"matrices_per_label":1088856,"matrix":["010000","000110","100001","010100","000011","001000"]}, + {"counts":[0,1,1,1,0,1,2],"matrices_per_label":135720,"matrix":["010000","000110","100001","000100","010011","001000"]}, + {"counts":[0,1,1,1,1,0,2],"matrices_per_label":134496,"matrix":["010000","000011","100010","010010","001000","000101"]}, + {"counts":[0,1,1,1,1,1,1],"matrices_per_label":25056,"matrix":["010000","000011","100010","000010","001000","010101"]}, + {"counts":[0,1,1,2,0,0,2],"matrices_per_label":8352,"matrix":["010000","100010","100001","010011","001000","000100"]}, + {"counts":[0,1,2,0,0,0,3],"matrices_per_label":835200,"matrix":["010000","001000","100111","010100","010010","001001"]}, + {"counts":[0,1,2,0,0,1,2],"matrices_per_label":185832,"matrix":["010000","001000","100111","000100","010010","001001"]}, + {"counts":[0,1,2,0,0,2,1],"matrices_per_label":30276,"matrix":["010000","001000","100111","000100","000010","011001"]}, + {"counts":[0,1,2,0,1,0,2],"matrices_per_label":835200,"matrix":["010000","001000","100011","010010","010001","001100"]}, + {"counts":[0,1,2,0,1,1,1],"matrices_per_label":185832,"matrix":["010000","001000","100011","000010","010001","001100"]}, + {"counts":[0,1,2,0,1,2,0],"matrices_per_label":30276,"matrix":["010000","001000","100011","000010","000001","011100"]}, + {"counts":[0,1,2,0,2,0,1],"matrices_per_label":835200,"matrix":["010000","001000","100001","010001","010100","001010"]}, + {"counts":[0,1,2,0,2,1,0],"matrices_per_label":185832,"matrix":["010000","001000","100001","000001","010100","001010"]}, + {"counts":[0,1,2,1,0,0,2],"matrices_per_label":185832,"matrix":["010000","001000","100011","010010","001001","000100"]}, + {"counts":[0,1,2,1,0,1,1],"matrices_per_label":30276,"matrix":["010000","001000","100011","000010","011001","000100"]}, + {"counts":[0,1,2,1,1,0,1],"matrices_per_label":185832,"matrix":["010000","001000","100001","010001","000100","001010"]}, + {"counts":[0,1,2,1,1,1,0],"matrices_per_label":30276,"matrix":["010000","001000","100001","000001","000100","011010"]}, + {"counts":[0,1,2,2,0,0,1],"matrices_per_label":30276,"matrix":["010000","001000","100001","011001","000100","000010"]}, + {"counts":[0,2,0,0,0,0,4],"matrices_per_label":13347648,"matrix":["101000","100100","010011","001100","001010","001001"]}, + {"counts":[0,2,0,0,0,1,3],"matrices_per_label":7159968,"matrix":["001100","101000","010011","001000","000110","000101"]}, + {"counts":[0,2,0,0,0,2,2],"matrices_per_label":7882200,"matrix":["001010","101000","010101","001000","000100","000011"]}, + {"counts":[0,2,0,0,1,0,3],"matrices_per_label":1118880,"matrix":["100100","100010","010001","000110","000101","001100"]}, + {"counts":[0,2,0,0,1,1,2],"matrices_per_label":643392,"matrix":["000110","100100","010001","000100","000011","001010"]}, + {"counts":[0,2,0,0,1,2,1],"matrices_per_label":835200,"matrix":["000101","100100","010010","000100","000010","001001"]}, + {"counts":[0,2,0,0,2,0,2],"matrices_per_label":44496,"matrix":["100010","100001","110000","000011","001010","000110"]}, + {"counts":[0,2,0,0,2,1,1],"matrices_per_label":38016,"matrix":["000011","100010","010010","000010","001001","000101"]}, + {"counts":[0,2,0,1,0,0,3],"matrices_per_label":564192,"matrix":["100100","100010","010001","000110","000101","001000"]}, + {"counts":[0,2,0,1,0,1,2],"matrices_per_label":712008,"matrix":["000110","100100","010001","000100","000011","001000"]}, + {"counts":[0,2,0,1,1,0,2],"matrices_per_label":21312,"matrix":["100010","100001","110000","000011","001000","000110"]}, + {"counts":[0,2,0,1,1,1,1],"matrices_per_label":45936,"matrix":["000011","100010","010010","000010","001000","000101"]}, + {"counts":[0,2,0,2,0,0,2],"matrices_per_label":22968,"matrix":["100010","100001","110000","000011","001000","000100"]}, + {"counts":[0,2,1,0,0,0,3],"matrices_per_label":997920,"matrix":["001000","100100","010011","001100","001010","001001"]}, + {"counts":[0,2,1,0,0,1,2],"matrices_per_label":544320,"matrix":["001000","100100","010011","000100","001010","001001"]}, + {"counts":[0,2,1,0,0,2,1],"matrices_per_label":657720,"matrix":["001000","100100","010011","000100","000010","001001"]}, + {"counts":[0,2,1,0,1,0,2],"matrices_per_label":281952,"matrix":["001000","100010","010001","001010","001001","001100"]}, + {"counts":[0,2,1,0,1,1,1],"matrices_per_label":153792,"matrix":["001000","100010","010001","000010","001001","001100"]}, + {"counts":[0,2,1,0,1,2,0],"matrices_per_label":185832,"matrix":["001000","100010","010001","000010","000001","001100"]}, + {"counts":[0,2,1,0,2,0,1],"matrices_per_label":38016,"matrix":["001000","100001","010001","001001","001100","001010"]}, + {"counts":[0,2,1,0,2,1,0],"matrices_per_label":20736,"matrix":["001000","100001","010001","000001","001100","001010"]}, + {"counts":[0,2,1,1,0,0,2],"matrices_per_label":153792,"matrix":["001000","100010","010001","001010","001001","000100"]}, + {"counts":[0,2,1,1,0,1,1],"matrices_per_label":185832,"matrix":["001000","100010","010001","000010","001001","000100"]}, + {"counts":[0,2,1,1,1,0,1],"matrices_per_label":20736,"matrix":["001000","100001","010001","001001","000100","001010"]}, + {"counts":[0,2,1,1,1,1,0],"matrices_per_label":25056,"matrix":["001000","100001","010001","000001","000100","001010"]}, + {"counts":[0,2,1,2,0,0,1],"matrices_per_label":25056,"matrix":["001000","100001","010001","001001","000100","000010"]}, + {"counts":[0,3,0,0,0,3,0],"matrices_per_label":8320680,"matrix":["100100","010100","001011","000100","000010","000001"]}, + {"counts":[0,3,0,1,0,2,0],"matrices_per_label":835200,"matrix":["100010","010010","001001","000010","000001","000100"]}, + {"counts":[0,3,0,2,0,1,0],"matrices_per_label":45936,"matrix":["100001","010001","001001","000001","000100","000010"]}, + {"counts":[1,0,0,0,0,0,5],"matrices_per_label":19040400,"matrix":["100000","011000","000111","010100","010010","001001"]}, + {"counts":[1,0,0,0,0,1,4],"matrices_per_label":3338496,"matrix":["100000","011000","000111","010000","000110","001101"]}, + {"counts":[1,0,0,0,0,2,3],"matrices_per_label":225504,"matrix":["100000","000110","011101","010000","001000","000111"]}, + {"counts":[1,0,0,0,1,0,4],"matrices_per_label":5345568,"matrix":["100000","001100","000011","001010","000110","010001"]}, + {"counts":[1,0,0,0,1,1,3],"matrices_per_label":1088856,"matrix":["100000","001100","000011","001000","000110","010001"]}, + {"counts":[1,0,0,0,1,2,2],"matrices_per_label":185832,"matrix":["100000","001010","000101","001000","000100","010011"]}, + {"counts":[1,0,0,0,2,0,3],"matrices_per_label":564192,"matrix":["100000","000110","000101","000011","010100","001100"]}, + {"counts":[1,0,0,0,2,1,2],"matrices_per_label":153792,"matrix":["100000","000110","000101","000100","010010","001001"]}, + {"counts":[1,0,0,1,0,0,4],"matrices_per_label":946944,"matrix":["100000","001100","000011","001010","001101","010000"]}, + {"counts":[1,0,0,1,0,1,3],"matrices_per_label":75168,"matrix":["100000","000110","001101","001000","000111","010000"]}, + {"counts":[1,0,0,1,1,0,3],"matrices_per_label":114912,"matrix":["100000","000110","000101","000011","010000","001100"]}, + {"counts":[1,0,0,1,1,1,2],"matrices_per_label":25056,"matrix":["100000","000110","000101","000100","010000","001011"]}, + {"counts":[1,0,0,2,0,0,3],"matrices_per_label":25056,"matrix":["100000","000110","000101","000111","010000","001000"]}, + {"counts":[1,0,1,0,0,0,4],"matrices_per_label":547056,"matrix":["010000","100000","001111","011000","000110","000101"]}, + {"counts":[1,0,1,0,0,1,3],"matrices_per_label":75168,"matrix":["010000","100000","001111","001000","000110","010101"]}, + {"counts":[1,0,1,0,1,0,3],"matrices_per_label":691128,"matrix":["010000","100000","000111","010100","010010","001001"]}, + {"counts":[1,0,1,0,1,1,2],"matrices_per_label":135720,"matrix":["010000","100000","000111","000100","010010","001001"]}, + {"counts":[1,0,1,0,1,2,1],"matrices_per_label":30276,"matrix":["010000","100000","000111","000100","000010","011001"]}, + {"counts":[1,0,1,0,2,0,2],"matrices_per_label":712008,"matrix":["010000","100000","000011","010010","011000","000101"]}, + {"counts":[1,0,1,0,2,1,1],"matrices_per_label":185832,"matrix":["010000","100000","000011","000010","011000","000101"]}, + {"counts":[1,0,1,1,0,0,3],"matrices_per_label":75168,"matrix":["010000","100000","000111","000110","010101","001000"]}, + {"counts":[1,0,1,1,1,0,2],"matrices_per_label":135720,"matrix":["010000","100000","000011","010010","001000","000101"]}, + {"counts":[1,0,1,1,1,1,1],"matrices_per_label":30276,"matrix":["010000","100000","000011","000010","001000","010101"]}, + {"counts":[1,0,2,0,3,0,0],"matrices_per_label":835200,"matrix":["010000","001000","100000","010100","010010","001001"]}, + {"counts":[1,0,2,1,2,0,0],"matrices_per_label":185832,"matrix":["010000","001000","100000","000100","010010","001001"]}, + {"counts":[1,0,2,2,1,0,0],"matrices_per_label":30276,"matrix":["010000","001000","100000","000100","000010","011001"]}, + {"counts":[1,1,0,0,0,0,4],"matrices_per_label":984240,"matrix":["100000","001100","010011","001010","000110","001001"]}, + {"counts":[1,1,0,0,0,1,3],"matrices_per_label":523584,"matrix":["100000","001100","010011","001000","000110","000101"]}, + {"counts":[1,1,0,0,0,2,2],"matrices_per_label":507384,"matrix":["100000","001010","010101","001000","000100","000011"]}, + {"counts":[1,1,0,0,1,0,3],"matrices_per_label":234792,"matrix":["100000","000110","010001","000101","000011","001100"]}, + {"counts":[1,1,0,0,1,1,2],"matrices_per_label":134496,"matrix":["100000","000110","010001","000100","000011","001010"]}, + {"counts":[1,1,0,0,1,2,1],"matrices_per_label":185832,"matrix":["100000","000101","010010","000100","000010","001001"]}, + {"counts":[1,1,0,0,2,0,2],"matrices_per_label":21312,"matrix":["100000","010010","010001","000011","001010","000110"]}, + {"counts":[1,1,0,0,2,1,1],"matrices_per_label":20736,"matrix":["100000","000011","010010","000010","001001","000101"]}, + {"counts":[1,1,0,1,0,0,3],"matrices_per_label":114912,"matrix":["100000","000110","010001","000101","000011","001000"]}, + {"counts":[1,1,0,1,0,1,2],"matrices_per_label":135720,"matrix":["100000","000110","010001","000100","000011","001000"]}, + {"counts":[1,1,0,1,1,0,2],"matrices_per_label":9216,"matrix":["100000","010010","010001","000011","001000","000110"]}, + {"counts":[1,1,0,1,1,1,1],"matrices_per_label":25056,"matrix":["100000","000011","010010","000010","001000","000101"]}, + {"counts":[1,1,0,2,0,0,2],"matrices_per_label":8352,"matrix":["100000","010010","010001","000011","001000","000100"]}, + {"counts":[1,1,1,0,0,0,3],"matrices_per_label":45936,"matrix":["001000","100000","010111","001100","001010","001001"]}, + {"counts":[1,1,1,0,0,1,2],"matrices_per_label":25056,"matrix":["001000","100000","010111","000100","001010","001001"]}, + {"counts":[1,1,1,0,0,2,1],"matrices_per_label":30276,"matrix":["001000","100000","010111","000100","000010","001001"]}, + {"counts":[1,1,1,0,1,0,2],"matrices_per_label":45936,"matrix":["001000","100000","010011","001010","001001","001100"]}, + {"counts":[1,1,1,0,1,1,1],"matrices_per_label":25056,"matrix":["001000","100000","010011","000010","001001","001100"]}, + {"counts":[1,1,1,0,1,2,0],"matrices_per_label":30276,"matrix":["001000","100000","010011","000010","000001","001100"]}, + {"counts":[1,1,1,0,2,0,1],"matrices_per_label":45936,"matrix":["001000","100000","010001","001001","001100","001010"]}, + {"counts":[1,1,1,0,2,1,0],"matrices_per_label":25056,"matrix":["001000","100000","010001","000001","001100","001010"]}, + {"counts":[1,1,1,1,0,0,2],"matrices_per_label":25056,"matrix":["001000","100000","010011","001010","001001","000100"]}, + {"counts":[1,1,1,1,0,1,1],"matrices_per_label":30276,"matrix":["001000","100000","010011","000010","001001","000100"]}, + {"counts":[1,1,1,1,1,0,1],"matrices_per_label":25056,"matrix":["001000","100000","010001","001001","000100","001010"]}, + {"counts":[1,1,1,1,1,1,0],"matrices_per_label":30276,"matrix":["001000","100000","010001","000001","000100","001010"]}, + {"counts":[1,1,1,2,0,0,1],"matrices_per_label":30276,"matrix":["001000","100000","010001","001001","000100","000010"]}, + {"counts":[1,2,0,0,0,3,0],"matrices_per_label":657720,"matrix":["100000","010100","001011","000100","000010","000001"]}, + {"counts":[1,2,0,1,0,2,0],"matrices_per_label":185832,"matrix":["100000","010010","001001","000010","000001","000100"]}, + {"counts":[1,2,0,2,0,1,0],"matrices_per_label":25056,"matrix":["100000","010001","001001","000001","000100","000010"]}, + {"counts":[2,0,0,0,0,0,4],"matrices_per_label":20880,"matrix":["100000","010000","001111","001100","001010","001001"]}, + {"counts":[2,0,0,0,0,1,3],"matrices_per_label":25056,"matrix":["100000","010000","001111","001000","000110","000101"]}, + {"counts":[2,0,0,0,1,0,3],"matrices_per_label":39672,"matrix":["100000","010000","000111","000110","000101","001100"]}, + {"counts":[2,0,0,0,1,1,2],"matrices_per_label":8352,"matrix":["100000","010000","000111","000100","001010","001001"]}, + {"counts":[2,0,0,0,1,2,1],"matrices_per_label":30276,"matrix":["100000","010000","000111","000100","000010","001001"]}, + {"counts":[2,0,0,0,2,0,2],"matrices_per_label":22968,"matrix":["100000","010000","000011","001010","001001","000110"]}, + {"counts":[2,0,0,0,2,1,1],"matrices_per_label":25056,"matrix":["100000","010000","000011","000010","001001","000101"]}, + {"counts":[2,0,0,1,0,0,3],"matrices_per_label":25056,"matrix":["100000","010000","000111","000110","000101","001000"]}, + {"counts":[2,0,0,1,1,0,2],"matrices_per_label":8352,"matrix":["100000","010000","000011","001000","000110","000101"]}, + {"counts":[2,0,0,1,1,1,1],"matrices_per_label":30276,"matrix":["100000","010000","000011","000010","001000","000101"]}, + {"counts":[2,0,1,0,3,0,0],"matrices_per_label":45936,"matrix":["001000","100000","010000","001100","001010","001001"]}, + {"counts":[2,0,1,1,2,0,0],"matrices_per_label":25056,"matrix":["001000","100000","010000","000100","001010","001001"]}, + {"counts":[2,0,1,2,1,0,0],"matrices_per_label":30276,"matrix":["001000","100000","010000","000100","000010","001001"]}, + {"counts":[2,1,0,0,0,3,0],"matrices_per_label":30276,"matrix":["100000","010000","001111","000100","000010","000001"]}, + {"counts":[2,1,0,1,0,2,0],"matrices_per_label":30276,"matrix":["100000","010000","001011","000010","000001","000100"]}, + {"counts":[2,1,0,2,0,1,0],"matrices_per_label":30276,"matrix":["100000","010000","001001","000001","000100","000010"]}, + {"counts":[3,0,0,3,0,0,0],"matrices_per_label":30276,"matrix":["100000","010000","001000","000100","000010","000001"]} + ] +} diff --git a/research/two-block-signatures/ZERO-ONE.md b/research/two-block-signatures/ZERO-ONE.md new file mode 100644 index 0000000000..e166b17c7d --- /dev/null +++ b/research/two-block-signatures/ZERO-ONE.md @@ -0,0 +1,14 @@ +# Zero-one entries, with the inverse taken over the rationals + +The word “binary” in Gonzalo Mier's #3990 refers to **coefficients restricted to zero and one**. Its inverse is taken over the rationals. In four ports this gives 391 signatures, between the 355 attained in the two-element field and the 439 attained over unrestricted rationals. The analogous six-port counts are **30,547, 32,287 and 33,727**, respectively. The middle quantity is a finite coefficient census and does not extend the arbitrary-size sufficiency theorem to a restricted alphabet. [#3990](https://github.com/CrocSwap/integer-mult-bounds/pull/3990) · [#3997](https://github.com/CrocSwap/integer-mult-bounds/pull/3997) + +## How the enumeration covers every matrix + +1. For each triple of distinct nonzero zero-one rows, compute its 20 maximal minors. A nonzero minor vector identifies its rational row space up to a common scalar. Dividing by the gcd and fixing the sign gives a unique key. One way to see uniqueness is to choose a nonzero pivot minor. Ratios of the minors that replace one pivot column recover the entries in that pivot chart by Cramer's rule. Every independent unordered triple contributes six ordered row bases to its space. This gives 11,445 spaces spanned by an admissible basis. +2. A coordinate is absent from that space if no nonzero pivot minor uses it. Its coordinate vector lies in the space if every nonzero pivot minor uses it, because deletion of that column then drops the row rank. Thus the two incidences needed for the signature are read from the minor key. +3. Two spaces are complementary exactly when the signed sum of products of their minors on complementary column sets is nonzero. This is Laplace expansion of the stacked determinant over the integers. Coordinate permutations preserve the signature profile and number of zero-one row bases. Their action on the first space gives 72 orbits. Test every second space against one representative and multiply by the orbit size. For each complementary pair, multiply by the numbers of ordered zero-one bases in its two spaces to count actual matrices. +4. The result is 81,939,900 ordered pairs of admissible complementary spaces and 28,836,612,000 invertible matrices. There are 179 message profiles or 32,287 labeled signatures. Dividing each profile's matrix count by its multinomial multiplicity gives the exact count per label. A first representative is relabeled canonically and inverted over the rationals before publication. [Matrices and per-label counts](ZERO-ONE.json) · [Executable census](zero_one_census.py) + +As a separate control, literal integer cofactors on all 65,536 four-port matrices reproduce the entire four-port profile histogram, including all 22,560 invertible matrices and all 391 labeled codes. The six-port total of invertible matrices is a previously published figure. The distinct question here is their block source/reader distribution. [Živković, *Classification of small (0,1) matrices*](https://arxiv.org/abs/math/0511636) · [Dai, Kim and Kim, Table 1](https://archive.ymsc.tsinghua.edu.cn/pacm_download/21/59-2008Invertibility_probability_of_binary_matrices.pdf) + +The zero-one graph witnesses for all feasible two-element-field signatures have odd determinant. In those pivot charts the masks depend on which rows and columns are zero, so the integer matrices retain their signatures over the rationals. The six-port restricted alphabet thus adds 1,740 labeled signatures to the binary-field set and leaves 1,440 ordinary signatures unrealized. The strict positive-tariff example in the main proof is attained with zero-one entries over the rationals. diff --git a/research/two-block-signatures/audit_mutations.py b/research/two-block-signatures/audit_mutations.py index 0d16fde731..7bf68bbd8c 100644 --- a/research/two-block-signatures/audit_mutations.py +++ b/research/two-block-signatures/audit_mutations.py @@ -26,6 +26,10 @@ ("omit monomial orbit weight", "ternary_oracle.py", "total[key] += weight*count", "total[key] += count", CENSUS, "ternary total pair count"), ("omit doubly saturated patterns", "counts.py", " + both(p)*both(q)", " + 0", PRIMARY, "ordinary count formula differs"), ("miss one odd side", "counts.py", '"binary one B":odd_side(q,p)', '"binary one B":0', PRIMARY, "exception count formula differs"), + ("drop coefficient basis multiplicity", "zero_one_census.py", "hist[key] += weight*bases[upper]*number", + "hist[key] += weight", "zero_one_census.py", "zero-one literal four-port census"), + ("reduce rational complement modulo two", "zero_one_census.py", "if not sum(c*lower[j] for j,c in dual):", + "if not sum(c*lower[j] for j,c in dual) % 2:", "zero_one_census.py", "zero-one literal four-port census"), ("corrupt prior source", "source/6691-PROOF.md", "## Lemma 1:", "## Altered lemma:", PRIMARY, "retained source hash"), ] DATA_FAULTS = [ @@ -75,7 +79,7 @@ def audit(): dest = root/f.relative_to(PACKAGE) dest.parent.mkdir(parents=True,exist_ok=True) shutil.copyfile(f,dest) - for entry in (PRIMARY,CENSUS): + for entry in (PRIMARY,CENSUS,"zero_one_census.py"): positives = [] for opt in (False,True): proc = invoke(root,entry,opt) @@ -92,7 +96,7 @@ def audit(): for name,filename,entry,why in DATA_FAULTS: raw = (root/filename).read_bytes() results.append(test_fault(root,name,filename,raw,change_data(name,raw),entry,why)) - return dict(status="PASS_TWO_BLOCK_MUTATIONS", positive_controls=4, rejected_probes=2*len(results), faults=results) + return dict(status="PASS_TWO_BLOCK_MUTATIONS", positive_controls=6, rejected_probes=2*len(results), faults=results) if __name__ == "__main__": diff --git a/research/two-block-signatures/zero_one_census.py b/research/two-block-signatures/zero_one_census.py new file mode 100644 index 0000000000..cc5598b134 --- /dev/null +++ b/research/two-block-signatures/zero_one_census.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 +"""Exact six-port census of zero-one coefficient matrices inverted over Q.""" +from collections import Counter +from itertools import combinations +from math import factorial, gcd +import json +from pathlib import Path +import sys + +PACKAGE = Path(__file__).resolve().parent +sys.path.insert(0,str(PACKAGE)) +from algebra import inverse, masks +from construction_check import need +from signatures import TYPES, Profile, multiplicity + + +def primitive(values): + divisor = gcd(*values) + if not divisor: + return None + if next(x for x in values if x) < 0: + divisor = -divisor + return tuple(v//divisor for v in values) + + +def minor(rows, columns): + if len(rows) == 2: + a,b = rows + i,j = columns + return a[i]*b[j] - a[j]*b[i] + a,b,c = rows + i,j,k = columns + return (a[i]*(b[j]*c[k]-b[k]*c[j]) - a[j]*(b[i]*c[k]-b[k]*c[i]) + + a[k]*(b[i]*c[j]-b[j]*c[i])) + + +def row_spaces(d, subsets): + n = 2*d + vectors = [tuple((v>>j)&1 for j in range(n)) for v in range(1,1<y for k,x in enumerate(xs) for y in xs[k+1:]) + + +def coordinate_orbits(bases, subsets, n): + index = {s:i for i,s in enumerate(subsets)} + moves = [] + for j in range(n-1): + swap = list(range(n)) + swap[j],swap[j+1] = swap[j+1],swap[j] + images = [[swap[i] for i in subset] for subset in subsets] + moves.append([(index[tuple(sorted(img))],parity(img)) for img in images]) + seen = set() + for start in bases: + if start in seen: + continue + group = [start] + seen.add(start) + for key in group: + for action in moves: + other = primitive([sign*key[i] for i,sign in action]) + need(bases[other] == bases[start], "zero-one orbit weight") + if other not in seen: + seen.add(other) + group.append(other) + yield start,len(group) + + +def row_masks(sa, ea, sb, eb, n): + return tuple(4*(((sa>>j)&1)+2*((sb>>j)&1)) + (1-((eb>>j)&1))+2*(1-((ea>>j)&1)) + for j in range(n)) + + +def canonical_matrix(rows, symbols, d): + order = sorted(range(2*d),key=lambda j:TYPES.index(symbols[j])) + mat = tuple(tuple(row[j] for j in order) for row in rows) + inv = inverse(mat,"Q") + need(inv is not None and masks(mat,inv,d) == tuple(symbols[j] for j in order), "zero-one witness masks") + return ["".join(str(x) for x in row) for row in mat] + + +def compute(d): + if d not in (2,3): + raise ValueError("zero-one oracle bounded to four or six ports") + n = 2*d + subsets = list(combinations(range(n),d)) + index = {s:i for i,s in enumerate(subsets)} + bases, first, incidence = row_spaces(d,subsets) + adj = [] + for I in subsets: + J = tuple(k for k in range(n) if k not in I) + adj.append((index[J],parity(I+J))) + hist, witnesses = Counter(), {} + pairs = orbits = covered = 0 + for upper, weight in coordinate_orbits(bases,subsets,n): + orbits += 1 + covered += weight + dual = [(j,sign*x) for x,(j,sign) in zip(upper,adj,strict=True) if x] + for lower, number in bases.items(): + if not sum(c*lower[j] for j,c in dual): + continue + pairs += weight + syms = row_masks(*incidence[upper],*incidence[lower],n) + key = tuple(syms.count(s) for s in TYPES) + hist[key] += weight*bases[upper]*number + if key not in witnesses: + witnesses[key] = canonical_matrix(first[upper]+first[lower],syms,d) + need(covered == len(bases), "incomplete zero-one space partition") + summary = dict(spaces=len(bases),first_space_orbits=orbits,ordered_space_pairs=pairs, + invertible_matrices=sum(hist.values()),profiles=len(hist), + signatures=sum(multiplicity(Profile(*k).symbols()) for k in hist)) + return summary,hist,witnesses + + +def raw_four_port(): + """All 2^16 matrices. Read inverse supports from integer 3x3 cofactors.""" + vectors = [tuple((v>>i)&1 for i in range(4)) for v in range(16)] + triples = list(combinations(range(4),3))[::-1] # item j omits coordinate j + # Table of all minors for an ordered triple of four-bit rows and deleted column. + lookup = {(a,b,c,j):minor((vectors[a],vectors[b],vectors[c]),I) + for a in range(16) for b in range(16) for c in range(16) for j,I in enumerate(triples)} + hist = Counter() + for bits in range(1<<16): + rows = tuple((bits>>(4*i))&15 for i in range(4)) + remaining = [tuple(rows[k] for k in keep) for keep in triples] + adj = [[lookup[keep+(j,)] for j in range(4)] for keep in remaining] + det = sum((-1)**j*vectors[rows[0]][j]*adj[0][j] for j in range(4)) + if det: + symbols = [] + for j in range(4): + s = int(bool((rows[0]|rows[1]) & (1<0 and rem == 0, "zero-one labeling multiplicity") + rows.append(dict(counts=list(key),matrices_per_label=per,matrix=mats[key])) + return dict(four_port=small,six_port=six,profiles=rows) + + +if __name__ == "__main__": + result = build() + need(result == json.loads((PACKAGE/"ZERO-ONE.json").read_bytes()), "stored zero-one census differs") + print(json.dumps({"status":"PASS_TWO_BLOCK_ZERO_ONE_Q","result":result["six_port"]},sort_keys=True)) From d004a15d088cbc2ad9fd45f2bd6955240b5cee16 Mon Sep 17 00:00:00 2001 From: SHIN09-git Date: Wed, 4 Nov 2026 12:23:21 +0800 Subject: [PATCH 4/4] Certify that no shared six-port tariff gives two strict field gaps --- research/two-block-signatures/README.md | 2 + research/two-block-signatures/TASK.json | 2 +- .../two-block-signatures/THREE-PRICES.json | 37 +++++++++++++++++++ research/two-block-signatures/VALIDATION.md | 3 +- research/two-block-signatures/VERIFY.json | 4 +- research/two-block-signatures/ZERO-ONE.json | 15 ++++++++ research/two-block-signatures/ZERO-ONE.md | 10 +++++ .../two-block-signatures/audit_mutations.py | 3 ++ research/two-block-signatures/tariffs.py | 34 +++++++++++++++++ .../two-block-signatures/zero_one_census.py | 6 ++- 10 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 research/two-block-signatures/THREE-PRICES.json diff --git a/research/two-block-signatures/README.md b/research/two-block-signatures/README.md index 89a611aa7f..7e568edb6c 100644 --- a/research/two-block-signatures/README.md +++ b/research/two-block-signatures/README.md @@ -13,6 +13,8 @@ A signature records which blocks a message uses on input and which blocks read i In the middle row the basis entries are restricted. The rational inverse can use other coefficients. An exact weighted census accounts for 28,836,612,000 invertible zero-one matrices. [Restricted coefficient census](ZERO-ONE.md) +Although these three sets have different sizes, one additive tariff shared across the six messages gives at most two distinct minimum prices. Either adjacent pair can tie. [Why the three minima cannot all be distinct](ZERO-ONE.md#why-the-three-minima-cannot-all-be-distinct) + ## What determines a signature A nonzero determinant supplies simultaneous pivots for both blocks. After row-basis changes inside each block, the matrix consists of two identity diagonal blocks and two rectangular off-diagonal blocks. Six exclusive message types force the side on which they pivot. Messages using both blocks on input and output fill the leftover positions. The row and column support requirements then give an exact test and a direct witness with entries 0, 1 and −1 over the rationals. A small parity obstruction accounts for the entire binary deficit. Fields of characteristic two with more than two elements realize the full ordinary set. [Classification and proof](PROOF.md) diff --git a/research/two-block-signatures/TASK.json b/research/two-block-signatures/TASK.json index a218808ca6..365a9e0480 100644 --- a/research/two-block-signatures/TASK.json +++ b/research/two-block-signatures/TASK.json @@ -59,7 +59,7 @@ "budget_minutes": 60, "stop_rule": "Stop with the necessary/sufficient theorem, constructive witnesses, independent generic and finite-field counts, exact tariff certificates and an exported replay. Three-block signatures and a physical supplier are separate questions.", "outcome": "completed", - "evidence": "PROOF.md, COUNTING.md, SIX-PORTS.json, RESULT.json and PRICE-CERTIFICATES.json. All six-port labels are constructed and inverted. Independent structural matchings and finite projective enumerations check coverage and multiplicities.", + "evidence": "PROOF.md, COUNTING.md, SIX-PORTS.json, RESULT.json, ZERO-ONE.json and exact price certificates for the three domains. All six-port labels are constructed and inverted. Independent structural matchings and finite projective enumerations check coverage and multiplicities.", "author": "SHIN09-git with OpenAI Codex assistance", "ai_assistance": "Substantial OpenAI Codex assistance in proofs, experiments, source and literature checks, code and writing. The differently structured oracles have the same assisted author.", "open_questions": [ diff --git a/research/two-block-signatures/THREE-PRICES.json b/research/two-block-signatures/THREE-PRICES.json new file mode 100644 index 0000000000..021caa5f0c --- /dev/null +++ b/research/two-block-signatures/THREE-PRICES.json @@ -0,0 +1,37 @@ +[ + {"x":[0,0,2,0,0,2,2],"y":[0,0,0,2,0,0,4],"terms":[[1,"Z",[0,0,0,0,0,2,4]],[2,"B",[0,0,1,2,0,0,3]]]}, + {"x":[0,0,2,0,0,2,2],"y":[0,2,0,0,2,0,2],"terms":[[12,"Z",[0,1,1,0,1,2,1]],[6,"Z",[0,1,2,0,2,0,1]],[7,"B",[0,0,0,0,0,0,6]],[2,"B",[0,0,3,0,3,0,0]],[6,"B",[0,2,1,0,0,2,1]]]}, + {"x":[0,0,2,0,0,2,2],"y":[0,2,0,1,1,0,2],"terms":[[17,"Z",[0,0,0,2,0,0,4]],[48,"Z",[0,1,2,1,0,0,2]],[46,"Z",[0,3,0,0,0,3,0]],[62,"B",[0,0,0,0,0,1,5]],[42,"B",[0,0,3,0,3,0,0]],[22,"B",[0,3,0,2,0,1,0]]]}, + {"x":[0,0,2,0,0,2,2],"y":[0,2,0,2,0,0,2],"terms":[[9,"Z",[0,2,0,1,0,1,2]],[6,"B",[0,0,1,1,0,1,3]],[1,"B",[0,0,2,0,0,1,3]],[5,"B",[0,1,2,2,0,0,1]],[1,"B",[0,3,0,1,0,2,0]]]}, + {"x":[0,0,2,0,0,2,2],"y":[1,1,0,0,2,0,2],"terms":[[27,"Z",[0,1,0,0,1,2,2]],[49,"Z",[1,0,1,0,0,0,4]],[2,"Z",[2,0,1,0,3,0,0]],[44,"B",[0,0,2,0,2,1,1]],[17,"B",[0,2,1,0,1,2,0]],[8,"B",[2,1,0,0,0,3,0]]]}, + {"x":[0,0,2,0,0,2,2],"y":[2,0,0,0,0,0,4],"terms":[[2,"Z",[1,0,1,0,0,0,4]],[1,"B",[0,0,2,0,0,0,4]],[4,"B",[2,0,0,0,0,1,3]]]}, + {"x":[0,0,2,0,0,2,2],"y":[2,0,0,0,2,0,2],"terms":[[2,"Z",[1,0,2,0,3,0,0]],[3,"Z",[2,0,0,0,0,1,3]],[2,"B",[0,0,1,0,1,1,3]],[2,"B",[0,0,2,0,0,1,3]],[3,"B",[2,0,0,0,2,1,1]]]}, + {"x":[0,0,2,1,0,1,2],"y":[0,0,0,2,0,0,4],"terms":[[2,"Z",[0,0,0,2,0,0,4]],[1,"B",[0,0,0,0,0,2,4]],[4,"B",[0,0,1,2,0,0,3]]]}, + {"x":[0,0,2,1,0,1,2],"y":[0,2,0,0,2,0,2],"terms":[[10,"Z",[0,0,0,2,0,0,4]],[3,"Z",[0,1,0,0,0,0,5]],[6,"Z",[0,1,2,1,0,0,2]],[7,"Z",[0,3,0,0,0,3,0]],[5,"B",[0,0,2,0,0,1,3]],[10,"B",[0,0,3,0,3,0,0]]]}, + {"x":[0,0,2,1,0,1,2],"y":[0,2,0,1,1,0,2],"terms":[[17,"Z",[0,0,0,0,2,1,3]],[67,"Z",[0,1,1,2,0,0,2]],[11,"Z",[0,2,0,0,0,0,4]],[10,"B",[0,0,0,1,0,0,5]],[15,"B",[0,0,3,1,2,0,0]],[39,"B",[0,1,2,0,0,2,1]]]}, + {"x":[0,0,2,1,0,1,2],"y":[0,2,0,2,0,0,2],"terms":[[6,"Z",[0,1,1,2,0,0,2]],[1,"B",[0,0,1,2,0,0,3]],[3,"B",[0,1,1,0,0,2,2]],[1,"B",[0,1,2,2,0,0,1]]]}, + {"x":[0,0,2,1,0,1,2],"y":[1,1,0,0,2,0,2],"terms":[[9,"Z",[0,0,0,0,2,1,3]],[23,"Z",[0,2,0,0,0,1,3]],[8,"Z",[3,0,0,3,0,0,0]],[16,"B",[0,0,0,0,0,0,6]],[8,"B",[0,2,1,2,0,0,1]],[4,"B",[1,0,1,0,1,2,1]],[34,"B",[1,0,2,0,3,0,0]]]}, + {"x":[0,0,2,1,0,1,2],"y":[2,0,0,0,0,0,4],"terms":[[1,"Z",[1,0,1,0,0,1,3]],[1,"B",[1,0,1,1,0,0,3]]]}, + {"x":[0,0,2,1,0,1,2],"y":[2,0,0,0,2,0,2],"terms":[[8,"Z",[1,0,1,0,0,0,4]],[6,"Z",[1,0,2,1,2,0,0]],[1,"Z",[2,0,0,1,1,0,2]],[3,"B",[0,0,0,1,1,1,3]],[5,"B",[0,0,2,1,0,0,3]],[12,"B",[2,0,0,0,2,1,1]]]}, + {"x":[0,0,2,2,0,0,2],"y":[0,0,0,2,0,0,4],"terms":[[1,"Z",[0,0,0,2,0,0,4]],[2,"B",[0,0,1,2,0,0,3]]]}, + {"x":[0,0,2,2,0,0,2],"y":[0,2,0,0,2,0,2],"terms":[[5,"Z",[0,0,0,2,0,0,4]],[8,"Z",[0,0,3,1,2,0,0]],[10,"Z",[0,2,1,2,0,0,1]],[6,"B",[0,0,0,0,0,0,6]],[4,"B",[0,0,3,2,1,0,0]]]}, + {"x":[0,0,2,2,0,0,2],"y":[0,2,0,1,1,0,2],"terms":[[16,"Z",[0,1,1,2,0,0,2]],[2,"Z",[0,1,2,0,2,0,1]],[5,"B",[0,0,0,1,1,0,4]],[4,"B",[0,0,3,2,1,0,0]],[4,"B",[0,2,1,1,0,0,2]]]}, + {"x":[0,0,2,2,0,0,2],"y":[0,2,0,2,0,0,2],"terms":[[1,"Z",[0,2,0,2,0,0,2]],[2,"B",[0,1,0,2,0,0,3]],[2,"B",[0,2,1,2,0,0,1]]]}, + {"x":[0,0,2,2,0,0,2],"y":[1,1,0,0,2,0,2],"terms":[[12,"Z",[0,0,0,1,0,0,5]],[13,"Z",[0,2,0,2,0,0,2]],[10,"Z",[2,0,1,0,3,0,0]],[12,"B",[0,0,2,1,0,0,3]],[8,"B",[0,0,3,1,2,0,0]],[6,"B",[1,0,2,2,1,0,0]]]}, + {"x":[0,0,2,2,0,0,2],"y":[2,0,0,0,0,0,4],"terms":[[2,"Z",[0,0,1,2,0,0,3]],[1,"Z",[0,0,2,0,0,0,4]],[2,"Z",[3,0,0,3,0,0,0]],[6,"B",[1,0,1,0,0,0,4]]]}, + {"x":[0,0,2,2,0,0,2],"y":[2,0,0,0,2,0,2],"terms":[[1,"Z",[1,0,0,0,1,0,4]],[1,"B",[1,0,2,2,1,0,0]]]}, + {"x":[1,0,1,0,0,2,2],"y":[0,0,0,2,0,0,4],"terms":[[4,"Z",[0,0,0,1,0,1,4]],[2,"Z",[1,0,0,0,0,1,4]],[2,"Z",[3,0,0,3,0,0,0]],[5,"B",[0,0,1,0,0,2,3]],[3,"B",[0,0,1,2,0,0,3]]]}, + {"x":[1,0,1,0,0,2,2],"y":[0,2,0,0,2,0,2],"terms":[[52,"Z",[0,1,0,0,1,2,2]],[16,"Z",[0,1,2,0,0,0,3]],[37,"Z",[1,0,1,0,0,0,4]],[4,"Z",[2,0,1,0,3,0,0]],[18,"B",[0,0,2,0,2,1,1]],[32,"B",[2,1,0,0,0,3,0]]]}, + {"x":[1,0,1,0,0,2,2],"y":[0,2,0,1,1,0,2],"terms":[[11,"Z",[0,0,1,1,1,0,3]],[48,"Z",[0,1,2,0,1,2,0]],[28,"Z",[0,2,0,0,0,1,3]],[33,"Z",[2,0,0,0,1,2,1]],[27,"Z",[3,0,0,3,0,0,0]],[52,"B",[0,0,0,0,0,2,4]],[40,"B",[0,2,1,0,0,0,3]]]}, + {"x":[1,0,1,0,0,2,2],"y":[0,2,0,2,0,0,2],"terms":[[1,"Z",[0,0,0,2,0,0,4]],[1,"B",[0,2,0,0,0,1,3]],[1,"B",[0,2,1,2,0,0,1]],[1,"B",[1,2,0,2,0,1,0]]]}, + {"x":[1,0,1,0,0,2,2],"y":[1,1,0,0,2,0,2],"terms":[[16,"Z",[0,0,0,0,2,1,3]],[8,"Z",[1,0,2,0,3,0,0]],[21,"Z",[2,1,0,0,0,3,0]],[2,"B",[0,0,2,0,2,1,1]],[3,"B",[0,3,0,0,0,3,0]],[25,"B",[1,0,1,0,0,0,4]]]}, + {"x":[1,0,1,0,0,2,2],"y":[2,0,0,0,0,0,4],"terms":[[1,"Z",[2,0,0,0,0,1,3]],[1,"B",[1,0,1,0,0,1,3]]]}, + {"x":[1,0,1,0,0,2,2],"y":[2,0,0,0,2,0,2],"terms":[[2,"Z",[2,0,0,0,1,2,1]],[1,"B",[0,0,2,0,0,0,4]]]}, + {"x":[2,0,0,0,0,2,2],"y":[0,0,0,2,0,0,4],"terms":[[1,"Z",[0,0,0,2,0,0,4]],[1,"B",[1,0,0,0,0,2,3]],[1,"B",[1,0,0,2,0,0,3]]]}, + {"x":[2,0,0,0,0,2,2],"y":[0,2,0,0,2,0,2],"terms":[[1,"Z",[2,0,0,0,2,0,2]],[2,"Z",[2,1,0,0,0,3,0]],[1,"B",[0,0,0,0,0,0,6]]]}, + {"x":[2,0,0,0,0,2,2],"y":[0,2,0,1,1,0,2],"terms":[[6,"Z",[0,2,0,1,1,0,2]],[1,"Z",[1,1,0,2,0,0,2]],[8,"Z",[2,1,0,0,0,3,0]],[3,"B",[0,1,0,0,0,2,3]],[5,"B",[1,0,0,0,2,0,3]],[8,"B",[1,1,0,1,0,0,3]]]}, + {"x":[2,0,0,0,0,2,2],"y":[0,2,0,2,0,0,2],"terms":[[4,"Z",[0,1,0,1,0,0,4]],[1,"B",[0,0,0,0,0,1,5]],[6,"B",[1,2,0,2,0,1,0]],[1,"B",[2,0,0,0,0,1,3]]]}, + {"x":[2,0,0,0,0,2,2],"y":[1,1,0,0,2,0,2],"terms":[[3,"Z",[0,2,0,0,0,0,4]],[2,"Z",[0,2,0,0,2,1,1]],[6,"Z",[2,0,0,0,1,0,3]],[10,"B",[2,0,0,0,1,2,1]]]}, + {"x":[2,0,0,0,0,2,2],"y":[2,0,0,0,0,0,4],"terms":[[1,"Z",[2,0,0,0,0,1,3]],[1,"B",[2,0,0,0,0,1,3]]]}, + {"x":[2,0,0,0,0,2,2],"y":[2,0,0,0,2,0,2],"terms":[[1,"Z",[2,0,0,0,2,0,2]],[2,"B",[2,0,0,0,1,0,3]],[2,"B",[2,0,0,0,2,1,1]]]} +] diff --git a/research/two-block-signatures/VALIDATION.md b/research/two-block-signatures/VALIDATION.md index c8c7ededb2..3d2401d29e 100644 --- a/research/two-block-signatures/VALIDATION.md +++ b/research/two-block-signatures/VALIDATION.md @@ -10,6 +10,7 @@ The general claim is a written proof. The checks below use exact arithmetic and | Generic perfect matchings | All 65,536 unrestricted four-port supports. The 37,823 structurally invertible ones give exactly the predecessor's 439 codes. All 262,144 six-port 3+3 graph-chart supports yield 2,500 codes for that fixed pivot labeling and 188 profiles under arbitrary relabeling | | Binary spaces | Enumerate both reduced row-echelon spaces and intersect their actual vector sets for every block split through six ports. At 3+3, all 714,240 complementary pairs among 1,395 three-spaces give exactly the 30,547 predicted codes. At 2+2, enumeration of all 65,536 binary matrices independently recovers all 20,160 invertible matrices, including every code's multiplicity | | Zero-one entries over Q | A separate census covers all 28,836,612,000 invertible six-port zero-one matrices. They give 179 profiles and 32,287 labels. Exact four-port cofactors check the whole small histogram | +| Shared additive prices across three domains | All 35 candidate pairs for two strict gaps have exact positive dependences. Two positive tariffs realize the two different single gaps | | Ternary spaces | Enumerate all 33,880 three-spaces in six coordinates. Coordinate permutations and sign changes partition the first space into 31 orbits. For each representative, test every possible second space using projective-line intersections. With exact orbit weights, all 666,860,040 ordered complementary pairs give precisely the 188 predicted profiles. The two-port control accounts for 10,530 complementary pairs in four coordinates | | Closed formulas | The ordinary count and the three separate binary deficits agree with weighted seven-type enumeration for all 78 splits of sizes 2–13. Larger balanced values, including 32+32, are in RESULT.json | | Tariffs | Twelve label-dependent monotone price tables are checked on every six-port signature. The nonmonotone parity family is independently minimized at balanced sizes 2–8. The 21 rational certificates cover every missing binary profile and use exact integer inequalities or convex weights | @@ -34,7 +35,7 @@ python3.12 -I -W error -B research/two-block-signatures/zero_one_census.py python3.12 -I -W error -B research/two-block-signatures/audit_mutations.py ``` -Markers are `PASS_TWO_BLOCK_SIGNATURES`, `PASS_TWO_BLOCK_INDEPENDENT_CENSUSES`, `PASS_TWO_BLOCK_LABELED_WITNESSES`, `PASS_TWO_BLOCK_ZERO_ONE_Q` and `PASS_TWO_BLOCK_MUTATIONS`. The fault audit starts with six private-copy positive controls. Twenty-two actual substitutions are rejected for their named reasons under both interpreter modes. They include losing pivot capacity, relaxing an isolated binary entry, transposing the cofactor, treating four elements as two, ignoring an orbit weight, reducing rational determinants modulo two, corrupting a price certificate and altering a retained source. Normal and optimized scientific receipts agree. +Markers are `PASS_TWO_BLOCK_SIGNATURES`, `PASS_TWO_BLOCK_INDEPENDENT_CENSUSES`, `PASS_TWO_BLOCK_LABELED_WITNESSES`, `PASS_TWO_BLOCK_ZERO_ONE_Q` and `PASS_TWO_BLOCK_MUTATIONS`. The fault audit starts with six private-copy positive controls. Twenty-three actual substitutions are rejected for their named reasons under both interpreter modes. They include losing pivot capacity, relaxing an isolated binary entry, transposing the cofactor, treating four elements as two, ignoring an orbit weight, reducing rational determinants modulo two, corrupting a price certificate and altering a retained source. Normal and optimized scientific receipts agree. All scientific entry points are standalone, work on read-only package files and need no network or Git executable. In a full Git checkout the source-history check runs separately. diff --git a/research/two-block-signatures/VERIFY.json b/research/two-block-signatures/VERIFY.json index 8c5b960ca9..4bc802ab3c 100644 --- a/research/two-block-signatures/VERIFY.json +++ b/research/two-block-signatures/VERIFY.json @@ -77,7 +77,7 @@ "{package}/zero_one_census.py" ], "timeout_seconds": 100, - "checks": "Exact rational zero-one coefficient census using weighted row bases, maximal minors and retained six-port witnesses." + "checks": "Exact rational zero-one coefficient census and positive dependences ruling out two strict six-port price gaps." }, { "argv": [ @@ -89,7 +89,7 @@ "{package}/audit_mutations.py" ], "timeout_seconds": 300, - "checks": "Six private-copy positive controls. Twenty-two concrete faults rejected for specified reasons in normal and optimized interpreters." + "checks": "Six private-copy positive controls. Twenty-three concrete faults rejected for specified reasons in normal and optimized interpreters." } ] } diff --git a/research/two-block-signatures/ZERO-ONE.json b/research/two-block-signatures/ZERO-ONE.json index 96e2cde106..12c52783e3 100644 --- a/research/two-block-signatures/ZERO-ONE.json +++ b/research/two-block-signatures/ZERO-ONE.json @@ -15,6 +15,21 @@ "profiles": 179, "signatures": 32287 }, + "three_domain_prices": { + "candidate_pairs": 35, + "examples": [ + [ + 10, + 10, + 11 + ], + [ + 8, + 9, + 9 + ] + ] + }, "profiles": [ {"counts":[0,0,0,0,0,0,6],"matrices_per_label":3459385440,"matrix":["110000","101000","000111","011000","000110","100101"]}, {"counts":[0,0,0,0,0,1,5],"matrices_per_label":206118000,"matrix":["110000","101000","000111","100000","000110","011101"]}, diff --git a/research/two-block-signatures/ZERO-ONE.md b/research/two-block-signatures/ZERO-ONE.md index e166b17c7d..b77f2cd524 100644 --- a/research/two-block-signatures/ZERO-ONE.md +++ b/research/two-block-signatures/ZERO-ONE.md @@ -12,3 +12,13 @@ The word “binary” in Gonzalo Mier's #3990 refers to **coefficients restricte As a separate control, literal integer cofactors on all 65,536 four-port matrices reproduce the entire four-port profile histogram, including all 22,560 invertible matrices and all 391 labeled codes. The six-port total of invertible matrices is a previously published figure. The distinct question here is their block source/reader distribution. [Živković, *Classification of small (0,1) matrices*](https://arxiv.org/abs/math/0511636) · [Dai, Kim and Kim, Table 1](https://archive.ymsc.tsinghua.edu.cn/pacm_download/21/59-2008Invertibility_probability_of_binary_matrices.pdf) The zero-one graph witnesses for all feasible two-element-field signatures have odd determinant. In those pivot charts the masks depend on which rows and columns are zero, so the integer matrices retain their signatures over the rationals. The six-port restricted alphabet thus adds 1,740 labeled signatures to the binary-field set and leaves 1,440 ordinary signatures unrealized. The strict positive-tariff example in the main proof is attained with zero-one entries over the rationals. + +## Why the three minima cannot all be distinct + +Fix one additive seven-type price vector shared by all six messages. Let O, Z and B denote the ordinary, rational zero-one and binary-field profile sets. They are nested, so the minima are weakly increasing in this order. **At least two adjacent minima agree**, for every real price vector in this six-port model. + +If both gaps were strict, some profile x outside Z would beat every profile in Z, and some profile y in Z but outside B would beat every profile in B. Each must also beat all of B. The nine convex-mixture certificates from [PRICE-CERTIFICATES.json](PRICE-CERTIFICATES.json) exclude those profiles from either role. This leaves five possible x and seven possible y. + +For each of the 35 pairs, [THREE-PRICES.json](THREE-PRICES.json) gives positive integer weights on differences of the form z−x with z in Z, or b−y with b in B. The weighted sum is the zero vector. Under the two proposed strict price gaps each of its terms would have strictly positive dot product with the common price, which is impossible. The verifier checks the domains, signs, all seven coordinate sums and coverage of the 35 pairs. Numerical linear programming found the weights; exact integer arithmetic certifies them. + +Either single gap can occur. In seven-type order, prices (3,3,3,1,2,2,2) yield minima (10,10,11), while (2,3,1,2,3,1,2) yield (8,9,9). This finite conclusion concerns the same price table at every label. Message-dependent nonmonotone tariffs are outside its scope. diff --git a/research/two-block-signatures/audit_mutations.py b/research/two-block-signatures/audit_mutations.py index 7bf68bbd8c..1b21ae66ae 100644 --- a/research/two-block-signatures/audit_mutations.py +++ b/research/two-block-signatures/audit_mutations.py @@ -37,6 +37,7 @@ ("perturb convex weights", "PRICE-CERTIFICATES.json", PRIMARY, "convex combination differs from profile"), ("erase signed matrix entry", "SIX-PORTS.json", PRIMARY, "stored witness certificate differs"), ("inflate ternary multiplicity", "SIX-PORTS.json", CENSUS, "stored per-label multiplicity differs"), + ("perturb price dependence", "THREE-PRICES.json", "zero_one_census.py", "price differences do not cancel"), ] @@ -48,6 +49,8 @@ def change_data(name, original): next(row for row in data if "mixture" in row)["mixture"][0]["weight"] += 1 elif name == "erase signed matrix entry": data[0]["rational"][0] = "......" + elif name == "perturb price dependence": + data[0]["terms"][0][0] += 1 else: data[0]["pairs_per_label_F2_F3"][1] += 1 return json.dumps(data).encode() diff --git a/research/two-block-signatures/tariffs.py b/research/two-block-signatures/tariffs.py index cafbf173c2..59eeb5eb39 100644 --- a/research/two-block-signatures/tariffs.py +++ b/research/two-block-signatures/tariffs.py @@ -54,6 +54,40 @@ def parity_family(): return rows +def three_domains(binary, zero, ordinary, price_certificates, dependencies): + """Certify that a common additive tariff cannot have two strict gaps.""" + check_certificates(price_certificates) + separated = {tuple(r["counts"]) for r in price_certificates if "prices" in r} + pairs = {(x,y) for x in separated-zero for y in separated & zero} + seen = set() + for row in dependencies: + x,y = tuple(row["x"]),tuple(row["y"]) + if (x,y) not in pairs or (x,y) in seen or not row["terms"]: + raise ValueError("price comparison pair") + seen.add((x,y)) + total = [0]*7 + for weight,tag,profile in row["terms"]: + vector = tuple(profile) + if type(weight) is not int or weight <= 0 or tag not in ("Z","B"): + raise ValueError("price dependence term") + choices, target = (zero,x) if tag == "Z" else (binary,y) + if vector not in choices: + raise ValueError("price dependence domain") + for i in range(7): + total[i] += weight*(vector[i]-target[i]) + if any(total): + raise ValueError("price differences do not cancel") + if seen != pairs or len(pairs) != 35: + raise ValueError("incomplete strict-gap comparison") + examples = [] + for fees, expected in [((3,3,3,1,2,2,2),[10,10,11]), ((2,3,1,2,3,1,2),[8,9,9])]: + actual = [min(dot(fees,r) for r in choices) for choices in (ordinary,zero,binary)] + if actual != expected: + raise ValueError("three-domain price example") + examples.append(actual) + return dict(candidate_pairs=len(pairs), examples=examples) + + def literal_prices(codes, binary_codes, p, n): """Exhaust all actual six-port signatures for label-dependent monotone fees.""" receipts = [] diff --git a/research/two-block-signatures/zero_one_census.py b/research/two-block-signatures/zero_one_census.py index cc5598b134..784d1a82d1 100644 --- a/research/two-block-signatures/zero_one_census.py +++ b/research/two-block-signatures/zero_one_census.py @@ -12,6 +12,7 @@ from algebra import inverse, masks from construction_check import need from signatures import TYPES, Profile, multiplicity +from tariffs import three_domains def primitive(values): @@ -159,12 +160,15 @@ def build(): binary = {tuple(r["counts"]) for r in stored if r["binary"] is not None} ordinary = {tuple(r["counts"]) for r in stored} need(binary < set(hist) < ordinary, "zero-one coefficient domain nesting") + prior = json.loads((PACKAGE/"PRICE-CERTIFICATES.json").read_bytes()) + dependencies = json.loads((PACKAGE/"THREE-PRICES.json").read_bytes()) + prices = three_domains(binary,set(hist),ordinary,prior,dependencies) rows = [] for key,total in sorted(hist.items()): per,rem = divmod(total,multiplicity(Profile(*key).symbols())) need(per>0 and rem == 0, "zero-one labeling multiplicity") rows.append(dict(counts=list(key),matrices_per_label=per,matrix=mats[key])) - return dict(four_port=small,six_port=six,profiles=rows) + return dict(four_port=small,six_port=six,three_domain_prices=prices,profiles=rows) if __name__ == "__main__":