From 0dedef12f05f9a06faf9d4e1c8b1462c0e3bff3a Mon Sep 17 00:00:00 2001 From: Dillon Amburgey Date: Tue, 13 Oct 2026 00:11:21 -0400 Subject: [PATCH] Minimize balanced ternary dirty echo calls with pinned replay --- .../workflows/ternary-dirty-composition.yml | 33 + research/ternary-dirty-composition/CLAIM.json | 73 + .../ternary-dirty-composition/EXPECTED.json | 3313 +++++++++++++++++ research/ternary-dirty-composition/LICENSE | 201 + research/ternary-dirty-composition/NOTICE.md | 47 + research/ternary-dirty-composition/README.md | 304 ++ .../ternary-dirty-composition/SOURCES.json | 81 + research/ternary-dirty-composition/ternary.py | 101 + .../vendor/pr628/DIRTY-PROOF.md | 128 + .../vendor/pr628/FACTORS.json | 402 ++ .../vendor/pr628/NOTICE.md | 24 + .../vendor/pr628/check.py | 178 + .../vendor/pr628/check_budgets.py | 59 + .../vendor/pr628/dirty.py | 133 + .../vendor/pr628/dirty_budgets.py | 38 + .../vendor/pr628/interval_kernel.py | 61 + .../vendor/pr628/scan.py | 123 + .../vendor/pr628/weighted.py | 118 + .../vendor/pr673/ECHO-PROOF.md | 171 + .../vendor/pr673/echo.py | 75 + research/ternary-dirty-composition/verify.py | 455 +++ 21 files changed, 6118 insertions(+) create mode 100644 .github/workflows/ternary-dirty-composition.yml create mode 100644 research/ternary-dirty-composition/CLAIM.json create mode 100644 research/ternary-dirty-composition/EXPECTED.json create mode 100644 research/ternary-dirty-composition/LICENSE create mode 100644 research/ternary-dirty-composition/NOTICE.md create mode 100644 research/ternary-dirty-composition/README.md create mode 100644 research/ternary-dirty-composition/SOURCES.json create mode 100644 research/ternary-dirty-composition/ternary.py create mode 100644 research/ternary-dirty-composition/vendor/pr628/DIRTY-PROOF.md create mode 100644 research/ternary-dirty-composition/vendor/pr628/FACTORS.json create mode 100644 research/ternary-dirty-composition/vendor/pr628/NOTICE.md create mode 100644 research/ternary-dirty-composition/vendor/pr628/check.py create mode 100644 research/ternary-dirty-composition/vendor/pr628/check_budgets.py create mode 100644 research/ternary-dirty-composition/vendor/pr628/dirty.py create mode 100644 research/ternary-dirty-composition/vendor/pr628/dirty_budgets.py create mode 100644 research/ternary-dirty-composition/vendor/pr628/interval_kernel.py create mode 100644 research/ternary-dirty-composition/vendor/pr628/scan.py create mode 100644 research/ternary-dirty-composition/vendor/pr628/weighted.py create mode 100644 research/ternary-dirty-composition/vendor/pr673/ECHO-PROOF.md create mode 100644 research/ternary-dirty-composition/vendor/pr673/echo.py create mode 100644 research/ternary-dirty-composition/verify.py diff --git a/.github/workflows/ternary-dirty-composition.yml b/.github/workflows/ternary-dirty-composition.yml new file mode 100644 index 0000000000..1cc0ff3c1a --- /dev/null +++ b/.github/workflows/ternary-dirty-composition.yml @@ -0,0 +1,33 @@ +name: Ternary dirty composition + +on: + pull_request: + paths: + - 'research/ternary-dirty-composition/**' + - '.github/workflows/ternary-dirty-composition.yml' + push: + paths: + - 'research/ternary-dirty-composition/**' + - '.github/workflows/ternary-dirty-composition.yml' + workflow_dispatch: + +permissions: + contents: read + +jobs: + replay: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: '${{ matrix.python-version }}' + - run: python3 -I -O -B research/ternary-dirty-composition/verify.py + - run: git diff --exit-code diff --git a/research/ternary-dirty-composition/CLAIM.json b/research/ternary-dirty-composition/CLAIM.json new file mode 100644 index 0000000000..96d3f80955 --- /dev/null +++ b/research/ternary-dirty-composition/CLAIM.json @@ -0,0 +1,73 @@ +{ + "track": "recursive interfaces", + "assignment_seed": 58, + "seed_source": "Python secrets.randbelow(100), operating-system randomness", + "seed_role": "arity = 2 + seed % 3 = 3; includes n=58 as generic diagnostic and n=63 as radix-64 factor count", + "base_commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "start_eastern": "2026-10-12T23:21:34-04:00", + "claim_eastern": "2026-10-12T23:27:06.701824-04:00", + "expected_finish_eastern": "2026-10-13T02:15:00-04:00", + "hard_deadline_eastern": "2026-10-13T02:30:00-04:00", + "verification_reserve_starts_eastern": "2026-10-13T01:42:45-04:00", + "scope": "Minimize uniform leaf-call count among recursively balanced ternary PR673 dirty echoes at unchanged scratch; independently audit the pinned PR673 word with free nonlinear terms and noncommutative linear expressions; retain complete inherited precision/cost accounting. No selected supplier or kappa change.", + "method": "Place larger balanced blocks at twice-called ends; prove strict monotonicity and exchange optimality; check all balanced size placements through n=10000, 69 actual pinned PR673 words, and rounded unchanged PR628 leaves. No factor reordering.", + "expected_deliverable": "Standalone refinement and independent-verification package with an all-n proof, streaming dispatcher, deterministic certificate, source pins, attribution, reproduction command and one focused PR.", + "candidates": [ + { + "task": "Encoded width-9 residual split across owners", + "decision": "Not selected: fresh PR665 already supplies exact spectral dilation and its unfavorable boundary bill." + }, + { + "task": "Native bit ADDRESS fusion in a complete recursive call", + "decision": "Not selected: PR521 already covers the narrow local fusion; full integration exceeds this bounded scope." + }, + { + "task": "Ternary product-of-shears schedule", + "decision": "Selected: PR628 has binary recursion; PR663 independently audits that fixed binary word and exact count, without changing it. This changes the schedule and prices extra scratch." + } + ], + "coordination": "No pinned issue; only open issue #650 asks for Discussions. Claim recorded locally, as instructed.", + "overlap_snapshot": { + "open_prs": 486, + "recent_highest_pr": 668, + "reviewed_related_prs": [ + 628, + 663, + 665, + 666, + 521, + 448, + 451, + 522, + 667, + 668 + ], + "no_matching_ternary_schedule_found": true + }, + "status": "completed", + "deliverable_paths": [ + "research/ternary-dirty-composition/", + ".github/workflows/ternary-dirty-composition.yml" + ], + "overlap_refresh": { + "open_prs": 497, + "recent_highest_pr": 677, + "concurrent_overlap": 673, + "pr673_commit": "0e35f56cab3cae1eb0a99447135569d687c5695a", + "evidence_driven_pivot": "PR673 supplies general multiway echoes, including ternary. Narrow the contribution to optimal balanced ternary placement and independent free-term/noncommutative verification of the pinned PR673 generator. At 15 factors this reduces 208 calls to 160, preserving 5 scratch arrays. No new echo identity or exponent is claimed." + }, + "result": "Proved the balanced ternary uniform-call minimum and retained independent symbolic/rounded evidence. At 15 factors, calls fall from PR673's 208 to 160 with the same 5 scratch arrays; no new kappa.", + "result_url": "https://github.com/dillona/integer-mult-bounds/tree/research/seed58-ternary-dirty-composition/research/ternary-dirty-composition", + "final_overlap_snapshot": { + "at_utc": "2026-10-13T04:06:58.068676+00:00", + "open_prs": 506, + "recent_highest_pr": 686, + "pinned_coordination_issue": null, + "main_commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "related_pr673_commit_unchanged": true, + "additional_related_prs_checked": [ + 679 + ], + "distinct_contribution": "Balanced ternary placement minimum and independent free-function/noncommutative verification of the pinned generator, as described in README.md." + } +} diff --git a/research/ternary-dirty-composition/EXPECTED.json b/research/ternary-dirty-composition/EXPECTED.json new file mode 100644 index 0000000000..7806ef9b54 --- /dev/null +++ b/research/ternary-dirty-composition/EXPECTED.json @@ -0,0 +1,3313 @@ +{ + "controls": { + "nonlinear_dirt_example": [ + 1, + 3 + ], + "rejected": [ + "omit_leaf_0", + "flip_leaf_0", + "omit_leaf_1", + "flip_leaf_1", + "omit_leaf_2", + "flip_leaf_2", + "omit_leaf_3", + "flip_leaf_3", + "omit_leaf_4", + "flip_leaf_4", + "omit_leaf_5", + "flip_leaf_5", + "omit_leaf_6", + "flip_leaf_6", + "omit_leaf_7", + "flip_leaf_7", + "omit_leaf_8", + "flip_leaf_8", + "omit_leaf_9", + "flip_leaf_9", + "omit_leaf_10", + "flip_leaf_10", + "omit_leaf_11", + "flip_leaf_11", + "omit_leaf_12", + "flip_leaf_12", + "omit_leaf_13", + "flip_leaf_13", + "omit_leaf_14", + "flip_leaf_14", + "omit_leaf_15", + "flip_leaf_15", + "omit_leaf_16", + "flip_leaf_16", + "omit_leaf_17", + "flip_leaf_17", + "omit_leaf_18", + "flip_leaf_18", + "omit_leaf_19", + "flip_leaf_19", + "omit_leaf_20", + "flip_leaf_20", + "omit_leaf_21", + "flip_leaf_21", + "omit_leaf_22", + "flip_leaf_22", + "omit_leaf_23", + "flip_leaf_23", + "omit_leaf_24", + "flip_leaf_24", + "omit_leaf_25", + "flip_leaf_25", + "omit_leaf_26", + "flip_leaf_26", + "omit_leaf_27", + "flip_leaf_27", + "omit_leaf_28", + "flip_leaf_28", + "omit_leaf_29", + "flip_leaf_29", + "omit_leaf_30", + "flip_leaf_30", + "omit_leaf_31", + "flip_leaf_31", + "omit_leaf_32", + "flip_leaf_32", + "omit_leaf_33", + "flip_leaf_33", + "omit_leaf_34", + "flip_leaf_34", + "omit_leaf_35", + "flip_leaf_35", + "omit_leaf_36", + "flip_leaf_36", + "omit_leaf_37", + "flip_leaf_37", + "omit_leaf_38", + "flip_leaf_38", + "omit_leaf_39", + "flip_leaf_39", + "omit_leaf_40", + "flip_leaf_40", + "omit_leaf_41", + "flip_leaf_41", + "omit_leaf_42", + "flip_leaf_42", + "omit_leaf_43", + "flip_leaf_43", + "omit_leaf_44", + "flip_leaf_44", + "omit_leaf_45", + "flip_leaf_45", + "omit_leaf_46", + "flip_leaf_46", + "omit_leaf_47", + "flip_leaf_47", + "omit_leaf_48", + "flip_leaf_48", + "omit_leaf_49", + "flip_leaf_49", + "omit_leaf_50", + "flip_leaf_50", + "omit_leaf_51", + "flip_leaf_51", + "omit_leaf_52", + "flip_leaf_52", + "omit_leaf_53", + "flip_leaf_53", + "omit_leaf_54", + "flip_leaf_54", + "omit_leaf_55", + "flip_leaf_55", + "omit_leaf_56", + "flip_leaf_56", + "omit_leaf_57", + "flip_leaf_57", + "omit_leaf_58", + "flip_leaf_58", + "omit_leaf_59", + "flip_leaf_59", + "omit_leaf_60", + "flip_leaf_60", + "omit_leaf_61", + "flip_leaf_61", + "omit_leaf_62", + "flip_leaf_62", + "omit_leaf_63", + "flip_leaf_63", + "commute_factor_order", + "negate_without_reversing", + "alias_ternary_scratch", + "source_target_alias", + "scratch_source_alias", + "scratch_target_alias", + "scratch_pair_alias", + "insufficient_scratch", + "empty_factor_list", + "unequal_array_lengths", + "empty_array", + "invalid_sign", + "bool_sign" + ] + }, + "kernels": [ + { + "direction": -1, + "dirt": -7, + "dirty_arrays": 2, + "embedding": 1, + "factors": 3, + "leaves": 8, + "length": 1, + "lift_loop_visits": 24, + "net_sha256": "692b9128ac5d271ccf43a3f6593435be0ee5dab1105e77a8efc86982090606dc", + "phase_reads": 24, + "radix": 4, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 211 + }, + { + "direction": -1, + "dirt": 11, + "dirty_arrays": 2, + "embedding": 1, + "factors": 3, + "leaves": 8, + "length": 1, + "lift_loop_visits": 24, + "net_sha256": "14351268b5437102026b8728326e234ef2e796f006454b5104c9a8c23697ce9d", + "phase_reads": 24, + "radix": 4, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 212 + }, + { + "direction": 1, + "dirt": -7, + "dirty_arrays": 2, + "embedding": 1, + "factors": 3, + "leaves": 8, + "length": 1, + "lift_loop_visits": 24, + "net_sha256": "692b9128ac5d271ccf43a3f6593435be0ee5dab1105e77a8efc86982090606dc", + "phase_reads": 24, + "radix": 4, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 211 + }, + { + "direction": 1, + "dirt": 11, + "dirty_arrays": 2, + "embedding": 1, + "factors": 3, + "leaves": 8, + "length": 1, + "lift_loop_visits": 24, + "net_sha256": "14351268b5437102026b8728326e234ef2e796f006454b5104c9a8c23697ce9d", + "phase_reads": 24, + "radix": 4, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 212 + }, + { + "direction": -1, + "dirt": -7, + "dirty_arrays": 2, + "embedding": 1, + "factors": 3, + "leaves": 8, + "length": 3, + "lift_loop_visits": 72, + "net_sha256": "dbce20190a4d443f583127a2db20002d314967a3a6976f596c1947291be16786", + "phase_reads": 104, + "radix": 4, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 211 + }, + { + "direction": -1, + "dirt": 11, + "dirty_arrays": 2, + "embedding": 1, + "factors": 3, + "leaves": 8, + "length": 3, + "lift_loop_visits": 72, + "net_sha256": "977d635b02a12537dfba4af28bbb7c8e279eb0d76b51981e5c78a3527d2f68d6", + "phase_reads": 104, + "radix": 4, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 212 + }, + { + "direction": 1, + "dirt": -7, + "dirty_arrays": 2, + "embedding": 1, + "factors": 3, + "leaves": 8, + "length": 3, + "lift_loop_visits": 72, + "net_sha256": "06773f7ba4843fec5b1dd7ec0a69963e4cf58c200376a2c9910256c5cce1d206", + "phase_reads": 104, + "radix": 4, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 211 + }, + { + "direction": 1, + "dirt": 11, + "dirty_arrays": 2, + "embedding": 1, + "factors": 3, + "leaves": 8, + "length": 3, + "lift_loop_visits": 72, + "net_sha256": "f051e51269686657493cdb6e5f527373450cbe271372e4bb069292f391fa706f", + "phase_reads": 104, + "radix": 4, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 212 + }, + { + "direction": -1, + "dirt": -7, + "dirty_arrays": 4, + "embedding": 1, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "33d0d7b23885e035b577fee684b89c8db081f95491d8de3efe96c5b395d3ce4a", + "phase_reads": 148, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 832 + }, + { + "direction": -1, + "dirt": 11, + "dirty_arrays": 4, + "embedding": 1, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "71c8bfd3fef2da1b1a64cbd4a94516f32e9a83944ff3df7e8dcc213eab9a6286", + "phase_reads": 148, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 833 + }, + { + "direction": 1, + "dirt": -7, + "dirty_arrays": 4, + "embedding": 1, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "33d0d7b23885e035b577fee684b89c8db081f95491d8de3efe96c5b395d3ce4a", + "phase_reads": 148, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 832 + }, + { + "direction": 1, + "dirt": 11, + "dirty_arrays": 4, + "embedding": 1, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "71c8bfd3fef2da1b1a64cbd4a94516f32e9a83944ff3df7e8dcc213eab9a6286", + "phase_reads": 148, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 833 + }, + { + "direction": -1, + "dirt": -7, + "dirty_arrays": 4, + "embedding": 1, + "factors": 8, + "leaves": 48, + "length": 3, + "lift_loop_visits": 432, + "net_sha256": "3664f5bdeeb90fb5a118bafe98ba9b09face469dc5dd6ff214df27b1ad8c833b", + "phase_reads": 636, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 832 + }, + { + "direction": -1, + "dirt": 11, + "dirty_arrays": 4, + "embedding": 1, + "factors": 8, + "leaves": 48, + "length": 3, + "lift_loop_visits": 432, + "net_sha256": "a102ca8d1ef67702d79db62c8fb7f7a57d687b556cc4a209fd0affe6ae9f772a", + "phase_reads": 636, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 833 + }, + { + "direction": 1, + "dirt": -7, + "dirty_arrays": 4, + "embedding": 1, + "factors": 8, + "leaves": 48, + "length": 3, + "lift_loop_visits": 432, + "net_sha256": "a623fe614f03ebc695b1692d0d707dee1505d5fb592dbd0c6b96157507447eb4", + "phase_reads": 636, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 832 + }, + { + "direction": 1, + "dirt": 11, + "dirty_arrays": 4, + "embedding": 1, + "factors": 8, + "leaves": 48, + "length": 3, + "lift_loop_visits": 432, + "net_sha256": "a02074c58531813421351f45fef72808efa3817476bf5b11570fbe3359d37437", + "phase_reads": 636, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 833 + }, + { + "direction": -1, + "dirt": -7, + "dirty_arrays": 4, + "embedding": 2, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "215ff8b6266c3d87dce1b45cd84242ea19e71f8faa13189c725be1745f695ab5", + "phase_reads": 144, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 682 + }, + { + "direction": -1, + "dirt": 11, + "dirty_arrays": 4, + "embedding": 2, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "14e5eb4c95ede5a07cfd0a2da5aac60ae96a3f874ff3bfd27d23e4035ef872d5", + "phase_reads": 144, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 683 + }, + { + "direction": 1, + "dirt": -7, + "dirty_arrays": 4, + "embedding": 2, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "215ff8b6266c3d87dce1b45cd84242ea19e71f8faa13189c725be1745f695ab5", + "phase_reads": 144, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 682 + }, + { + "direction": 1, + "dirt": 11, + "dirty_arrays": 4, + "embedding": 2, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "14e5eb4c95ede5a07cfd0a2da5aac60ae96a3f874ff3bfd27d23e4035ef872d5", + "phase_reads": 144, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 683 + }, + { + "direction": -1, + "dirt": -7, + "dirty_arrays": 4, + "embedding": 2, + "factors": 8, + "leaves": 48, + "length": 3, + "lift_loop_visits": 432, + "net_sha256": "c46872e83eb0227b2c43a7c4c0dd93b8d037da64bbf487d991c1a596f1521005", + "phase_reads": 624, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 682 + }, + { + "direction": -1, + "dirt": 11, + "dirty_arrays": 4, + "embedding": 2, + "factors": 8, + "leaves": 48, + "length": 3, + "lift_loop_visits": 432, + "net_sha256": "93d4c84713fbab8d3c227b7b8aaad9cfd21840fc723522f278a079acfc90e158", + "phase_reads": 624, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 683 + }, + { + "direction": 1, + "dirt": -7, + "dirty_arrays": 4, + "embedding": 2, + "factors": 8, + "leaves": 48, + "length": 3, + "lift_loop_visits": 432, + "net_sha256": "6745bb56f1a405f9e3c311cbadbc4a461311352b251b6d45e097c50c3ec239b4", + "phase_reads": 624, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 682 + }, + { + "direction": 1, + "dirt": 11, + "dirty_arrays": 4, + "embedding": 2, + "factors": 8, + "leaves": 48, + "length": 3, + "lift_loop_visits": 432, + "net_sha256": "9645668600dceb554837555f6e6dcb95634b575114db9181928e966b9e340228", + "phase_reads": 624, + "radix": 9, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 683 + }, + { + "direction": -1, + "dirt": -7, + "dirty_arrays": 5, + "embedding": 1, + "factors": 15, + "leaves": 160, + "length": 1, + "lift_loop_visits": 480, + "net_sha256": "f8ffd0dc5ab2b87f24f62b537798a6c2fea9cf12d66eb446e2c822e723917943", + "phase_reads": 512, + "radix": 16, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 2399 + }, + { + "direction": -1, + "dirt": 11, + "dirty_arrays": 5, + "embedding": 1, + "factors": 15, + "leaves": 160, + "length": 1, + "lift_loop_visits": 480, + "net_sha256": "a210689e42d452bde414c84dc950df200159fb9d59e77d8269545021c071989d", + "phase_reads": 512, + "radix": 16, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 2400 + }, + { + "direction": 1, + "dirt": -7, + "dirty_arrays": 5, + "embedding": 1, + "factors": 15, + "leaves": 160, + "length": 1, + "lift_loop_visits": 480, + "net_sha256": "f8ffd0dc5ab2b87f24f62b537798a6c2fea9cf12d66eb446e2c822e723917943", + "phase_reads": 512, + "radix": 16, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 2399 + }, + { + "direction": 1, + "dirt": 11, + "dirty_arrays": 5, + "embedding": 1, + "factors": 15, + "leaves": 160, + "length": 1, + "lift_loop_visits": 480, + "net_sha256": "a210689e42d452bde414c84dc950df200159fb9d59e77d8269545021c071989d", + "phase_reads": 512, + "radix": 16, + "spectator_arrays": 1, + "target_bits": 128, + "working_bits": 2400 + } + ], + "pr673_comparison": { + "fanout": 3, + "source_words": [ + { + "dirty_arrays": 0, + "factors": 1, + "pr673_calls": 1, + "pr673_word_sha256": "47d62cf50f4414a1b6669e711cbaf7bb5a21a6196ba5fa67bbd8e2b43a977b48", + "refined_calls": 1, + "refined_word_sha256": "47d62cf50f4414a1b6669e711cbaf7bb5a21a6196ba5fa67bbd8e2b43a977b48" + }, + { + "dirty_arrays": 1, + "factors": 2, + "pr673_calls": 4, + "pr673_word_sha256": "e11bfbfbf682fba49120ec63dc76cdc6ef66ddd6349c68b8d85a9832d6101a9f", + "refined_calls": 4, + "refined_word_sha256": "e11bfbfbf682fba49120ec63dc76cdc6ef66ddd6349c68b8d85a9832d6101a9f" + }, + { + "dirty_arrays": 2, + "factors": 3, + "pr673_calls": 8, + "pr673_word_sha256": "c8aaa79b9a7250526e1d81c184d3c0e225af86ca4973105954a63bf4662d67c6", + "refined_calls": 8, + "refined_word_sha256": "c8aaa79b9a7250526e1d81c184d3c0e225af86ca4973105954a63bf4662d67c6" + }, + { + "dirty_arrays": 3, + "factors": 4, + "pr673_calls": 14, + "pr673_word_sha256": "11205bc3541adeaf0fc9aa01ca8bb246746b201ea7e1d5831b15b644b5147f2b", + "refined_calls": 14, + "refined_word_sha256": "11205bc3541adeaf0fc9aa01ca8bb246746b201ea7e1d5831b15b644b5147f2b" + }, + { + "dirty_arrays": 3, + "factors": 5, + "pr673_calls": 26, + "pr673_word_sha256": "ede653a1dc27ce12ab1e1c1db67d8a799c50fd3417640bf09aec5297fe3ac810", + "refined_calls": 20, + "refined_word_sha256": "af9f492ef9bb95dc0c403d095a998e8c724c0e4673de6615557a516bd0067b4d" + }, + { + "dirty_arrays": 3, + "factors": 6, + "pr673_calls": 32, + "pr673_word_sha256": "4525988983cbfdc11243b015d632891d88beb8abf703d50880689ebc748b5b01", + "refined_calls": 32, + "refined_word_sha256": "4525988983cbfdc11243b015d632891d88beb8abf703d50880689ebc748b5b01" + }, + { + "dirty_arrays": 4, + "factors": 7, + "pr673_calls": 40, + "pr673_word_sha256": "befa79d9974e978851d83269a5993cf3828abb284cf3eedb0f7b4e905229b09a", + "refined_calls": 40, + "refined_word_sha256": "befa79d9974e978851d83269a5993cf3828abb284cf3eedb0f7b4e905229b09a" + }, + { + "dirty_arrays": 4, + "factors": 8, + "pr673_calls": 56, + "pr673_word_sha256": "67e447a107874ddfcc69f1426a788b74f556a9fa7d5b4ed5806733f6fe80adf6", + "refined_calls": 48, + "refined_word_sha256": "9d06458a2ae5960f1e7cc406d0705a135719fbf773b95c55b65c4b1ac6b67965" + }, + { + "dirty_arrays": 4, + "factors": 9, + "pr673_calls": 64, + "pr673_word_sha256": "bf09baf7b74688dbb960edb20e8a5c2847e1528eb0da7c5c87fbfb7ab023c90c", + "refined_calls": 64, + "refined_word_sha256": "bf09baf7b74688dbb960edb20e8a5c2847e1528eb0da7c5c87fbfb7ab023c90c" + }, + { + "dirty_arrays": 5, + "factors": 10, + "pr673_calls": 76, + "pr673_word_sha256": "d79c7fbe43f7081ea76169c9621507cf48a43143fc6a361821736e3156b98a60", + "refined_calls": 76, + "refined_word_sha256": "d79c7fbe43f7081ea76169c9621507cf48a43143fc6a361821736e3156b98a60" + }, + { + "dirty_arrays": 5, + "factors": 11, + "pr673_calls": 100, + "pr673_word_sha256": "efab3b13da24f907ff1586f8fcbea1691510ddf14340a882a8f66abd5a6ec9f8", + "refined_calls": 88, + "refined_word_sha256": "7db9a20f154e7184aa2b3a2d92c9afa6c81ddae2fedd5c7cb6408d7e4fb77789" + }, + { + "dirty_arrays": 5, + "factors": 12, + "pr673_calls": 112, + "pr673_word_sha256": "2d98824b1fd9e8a4bee1676f7a317d3fbb3f54c8d5484be1d32146c67241d6e4", + "refined_calls": 112, + "refined_word_sha256": "2d98824b1fd9e8a4bee1676f7a317d3fbb3f54c8d5484be1d32146c67241d6e4" + }, + { + "dirty_arrays": 5, + "factors": 13, + "pr673_calls": 136, + "pr673_word_sha256": "18ee5fb399b82f2a2d0233a15b1db502073d5fabb77ba66b803875e872dcb052", + "refined_calls": 124, + "refined_word_sha256": "6d9d2dc3a29d55bdae0c6e466bed7a70575d0c391b27b735559c48a7d6a2d12d" + }, + { + "dirty_arrays": 5, + "factors": 14, + "pr673_calls": 184, + "pr673_word_sha256": "4038fc1ae869e503cafea798fc84c251ccd271e43a4c9e5a9edb6a659ed1bac4", + "refined_calls": 136, + "refined_word_sha256": "e3a39cffe0b25e961aaead52dc32dcdeaf93286dd43e2bddaddee361b1c9257f" + }, + { + "dirty_arrays": 5, + "factors": 15, + "pr673_calls": 208, + "pr673_word_sha256": "b020ed186197b16a4cc8468ac38377bad98d9871d1956c74ac5d3bd02cf45136", + "refined_calls": 160, + "refined_word_sha256": "5fabead59c843454c9e55f99fc371f8c3fec157782b45a1ef9416bcf54813d3e" + }, + { + "dirty_arrays": 5, + "factors": 16, + "pr673_calls": 220, + "pr673_word_sha256": "1bd9d068e0865a99212ea8071cdb3da44814ff909f2953f1f057c3ea1b837eb4", + "refined_calls": 184, + "refined_word_sha256": "b7729b8159afb0e82af7571553741652c883db518679a8a29a51af19e27f0ce7" + }, + { + "dirty_arrays": 5, + "factors": 17, + "pr673_calls": 244, + "pr673_word_sha256": "5b469f80d398c2df3235c03e7c32ebd67bbc027de9b08d108b004e7ce196e5be", + "refined_calls": 208, + "refined_word_sha256": "bc0b09d30724aff9d645f52bf6a92a181eb2d242a1261f51a2b1bbc0fd3e3efb" + }, + { + "dirty_arrays": 5, + "factors": 18, + "pr673_calls": 256, + "pr673_word_sha256": "fe82fc3ee26fb16e89232bbf06b62c9a8e0bbd3141b3fefb8c86110e1e384616", + "refined_calls": 256, + "refined_word_sha256": "fe82fc3ee26fb16e89232bbf06b62c9a8e0bbd3141b3fefb8c86110e1e384616" + }, + { + "dirty_arrays": 6, + "factors": 19, + "pr673_calls": 272, + "pr673_word_sha256": "5737bb12cc1b2339854a04072fd20cf091c1da032dcafe84c44a5da2825e765b", + "refined_calls": 272, + "refined_word_sha256": "5737bb12cc1b2339854a04072fd20cf091c1da032dcafe84c44a5da2825e765b" + }, + { + "dirty_arrays": 6, + "factors": 20, + "pr673_calls": 304, + "pr673_word_sha256": "1ba62a32071173dbc5d168578e0d24b3a15ae2dfa6384ecc49e384aa1a83e2fe", + "refined_calls": 288, + "refined_word_sha256": "94e8d5bbf2ce4a5851491dcc9c092076ee014cd35d696f05ff1999511a2c5529" + }, + { + "dirty_arrays": 6, + "factors": 21, + "pr673_calls": 320, + "pr673_word_sha256": "34b29a1d9d810eb31b2af7c5fa9222c98db654c0e736a3d381f4d623388fd34c", + "refined_calls": 320, + "refined_word_sha256": "34b29a1d9d810eb31b2af7c5fa9222c98db654c0e736a3d381f4d623388fd34c" + }, + { + "dirty_arrays": 6, + "factors": 22, + "pr673_calls": 352, + "pr673_word_sha256": "e141730fc70cd82e524efce93c5357fd73597d649958c7e564670a89fe82c058", + "refined_calls": 336, + "refined_word_sha256": "00608b1fbc30e0ecb100745fd2d0a8fd119208926c1ad19e251d63ab9f14720b" + }, + { + "dirty_arrays": 6, + "factors": 23, + "pr673_calls": 416, + "pr673_word_sha256": "4477269f71142cc9e24b1899f00fabd1df117de7276c7ed8e7a51e284555602f", + "refined_calls": 352, + "refined_word_sha256": "f6aab5099f84d405804542ad193391d7932007b11c60fd7c018ebb295c46e128" + }, + { + "dirty_arrays": 6, + "factors": 24, + "pr673_calls": 448, + "pr673_word_sha256": "69b91dfec49a470c8769232dd5dba10640747630b4bdf3f25a4980a5948ac4ff", + "refined_calls": 384, + "refined_word_sha256": "34ac9b6c67b9fba6959aac4639eae77c5b2f88655cf8fa427d4b1b4aeee1c961" + }, + { + "dirty_arrays": 6, + "factors": 25, + "pr673_calls": 464, + "pr673_word_sha256": "2616ce5eba4c20ae8ebde3764d851188a10d55448ede4cf5e0fa4a888656664c", + "refined_calls": 416, + "refined_word_sha256": "b6870067485410483d892b65cec57d3182c60fb10ebbf968c8e8533ae0839f14" + }, + { + "dirty_arrays": 6, + "factors": 26, + "pr673_calls": 496, + "pr673_word_sha256": "231cd085b50e4ed8d2afefe8e99c767b5743a1c8082de644a1ecfede2eaea74c", + "refined_calls": 448, + "refined_word_sha256": "b87105307bc4d006358d2d2769515b72909dbf0ae6589c872c0ac48a010aa0ee" + }, + { + "dirty_arrays": 6, + "factors": 27, + "pr673_calls": 512, + "pr673_word_sha256": "b63769a70d7a6c46b42fae51be9a33b4a415e979949857a9b2ebd6effc2825a0", + "refined_calls": 512, + "refined_word_sha256": "b63769a70d7a6c46b42fae51be9a33b4a415e979949857a9b2ebd6effc2825a0" + }, + { + "dirty_arrays": 7, + "factors": 28, + "pr673_calls": 536, + "pr673_word_sha256": "1a05ef43612769fa105d16f5092dc11aedd395ec46679078d6918e09ed27429f", + "refined_calls": 536, + "refined_word_sha256": "1a05ef43612769fa105d16f5092dc11aedd395ec46679078d6918e09ed27429f" + }, + { + "dirty_arrays": 7, + "factors": 29, + "pr673_calls": 584, + "pr673_word_sha256": "fc859aabf5f08d11845739daa21b8945b2c8101319df43b767b8b9012610f778", + "refined_calls": 560, + "refined_word_sha256": "52557be5628b439704ba915a5aa5c59c3775455f8e18cd32c4cab797654d6ea8" + }, + { + "dirty_arrays": 7, + "factors": 30, + "pr673_calls": 608, + "pr673_word_sha256": "4f270e20282a1d31cbc71bfb9646e571235c28074357e98da039b4016b1734b6", + "refined_calls": 608, + "refined_word_sha256": "4f270e20282a1d31cbc71bfb9646e571235c28074357e98da039b4016b1734b6" + }, + { + "dirty_arrays": 7, + "factors": 31, + "pr673_calls": 656, + "pr673_word_sha256": "690d543b5df9dcaa91416b877fc8dfb3fc665039ff2cbfa084ccb12ef08be927", + "refined_calls": 632, + "refined_word_sha256": "32de315859fe6db4abd891c95549be24ed9cde1177b307ac27869d80da78ed33" + }, + { + "dirty_arrays": 7, + "factors": 32, + "pr673_calls": 752, + "pr673_word_sha256": "d4f570bfeb8c133b706d90b0a36ec90105e81fbda71b12e4712348933ec168d7", + "refined_calls": 656, + "refined_word_sha256": "09285ed2d8d058ee7d133d89e6029eea1d2e47f9a81692353ae02949c11d649e" + }, + { + "dirty_arrays": 7, + "factors": 33, + "pr673_calls": 800, + "pr673_word_sha256": "747662370a960cdfd0e43784cf4af56eb39e850eb241167acfd630b4cf82a0d9", + "refined_calls": 704, + "refined_word_sha256": "882b576f751cb23e26b5de416f6a3bee957530bcf3bf5472905af1ad3134162a" + }, + { + "dirty_arrays": 7, + "factors": 34, + "pr673_calls": 824, + "pr673_word_sha256": "9148a03e1ea2585c701f9c6a399e0f0281ad098711720b2be048160e5c09e3e4", + "refined_calls": 752, + "refined_word_sha256": "9200b5931d8aa8950ec4cf0664534b870bd7fbaf153482fa7d07ca9175614e61" + }, + { + "dirty_arrays": 7, + "factors": 35, + "pr673_calls": 872, + "pr673_word_sha256": "908b59642485cf1a984b7429a025dfc612735b5824493e78f0030d879e774ac6", + "refined_calls": 800, + "refined_word_sha256": "b8fb5f47698a28e420487d13d0171a1331da19461aa6af4a657daab64cd1d7a9" + }, + { + "dirty_arrays": 7, + "factors": 36, + "pr673_calls": 896, + "pr673_word_sha256": "74a01ecec13104d813baf5477d209ce9f88256a1efe089600fefda16611990c9", + "refined_calls": 896, + "refined_word_sha256": "74a01ecec13104d813baf5477d209ce9f88256a1efe089600fefda16611990c9" + }, + { + "dirty_arrays": 7, + "factors": 37, + "pr673_calls": 944, + "pr673_word_sha256": "e7abff0e1c3ec01537ed8d95276901bc6b438f698a1d702b7eb53ec6b55c6ad0", + "refined_calls": 920, + "refined_word_sha256": "fd4c0c3777fa0f79bca5510c6a32814814a4296db2e7be8e4faefb223cc4401a" + }, + { + "dirty_arrays": 7, + "factors": 38, + "pr673_calls": 1040, + "pr673_word_sha256": "25b9249372117f13cd90742d20fe6d1b9fd9ecdac29bf982d37fe51d40873487", + "refined_calls": 944, + "refined_word_sha256": "521c78ed32794fdbff5c50ea20cf27485e00d6f946f2e5f446f8fdb2821e8449" + }, + { + "dirty_arrays": 7, + "factors": 39, + "pr673_calls": 1088, + "pr673_word_sha256": "53706beaf8ba1edc16765dab407bb7ad59f2ab45194879cb800a3c9310cae0a0", + "refined_calls": 992, + "refined_word_sha256": "8719441a1a7adef72292b1860fb9d42e997ba4287701cb8c055f4117d638d060" + }, + { + "dirty_arrays": 7, + "factors": 40, + "pr673_calls": 1184, + "pr673_word_sha256": "1ca46526d99e594d3ce1af9258dbc936396e35e0abdd04e5ecb09bb240d89509", + "refined_calls": 1016, + "refined_word_sha256": "3bc39f55cf5e54eb21e0638348f3221bc1820f3cbbe809d696ffa4e94db73c52" + }, + { + "dirty_arrays": 7, + "factors": 41, + "pr673_calls": 1376, + "pr673_word_sha256": "fcc6aba2304e47e7b9d3fa5212bee2872da23b8f39489883a2aab45d17a6838d", + "refined_calls": 1040, + "refined_word_sha256": "9c8cf473eb4a27c8be33adef08698b274ec6ce9da32f8edb565ed8e51dc223db" + }, + { + "dirty_arrays": 7, + "factors": 42, + "pr673_calls": 1472, + "pr673_word_sha256": "062de034b44cc9c02c374fa9c26aab14b2a596f30ea04beacf0ef75ba2991a33", + "refined_calls": 1088, + "refined_word_sha256": "15756dd471e6ad68796dea432cd9fffbee3b6160409493c878f217b54a508151" + }, + { + "dirty_arrays": 7, + "factors": 43, + "pr673_calls": 1520, + "pr673_word_sha256": "2269fee1a1bce75a7d64d0c611abddf824a7e5bd841f8b7fb6247cc4ee2a12aa", + "refined_calls": 1136, + "refined_word_sha256": "587dc9a7525789d55c980065a5b4c1287bbe6351bd4c8e53d0a88d307c2af4be" + }, + { + "dirty_arrays": 7, + "factors": 44, + "pr673_calls": 1616, + "pr673_word_sha256": "c1888046285d7baf82084f2f6c8d288d958505ebc962352e5984cced583a3fb2", + "refined_calls": 1184, + "refined_word_sha256": "a0f2f55b12900320b6e60a8456e7f7f1a11a5760d6ac8e13e80340e20e817add" + }, + { + "dirty_arrays": 7, + "factors": 45, + "pr673_calls": 1664, + "pr673_word_sha256": "527acc9850fcaedc9b106f1067d58d661f95a4008504375a8b7253eba7d7354a", + "refined_calls": 1280, + "refined_word_sha256": "17b81e2930b404bca5bb527334167bc86819a68a73f49922d7c90e2b399788c5" + }, + { + "dirty_arrays": 7, + "factors": 46, + "pr673_calls": 1688, + "pr673_word_sha256": "52b5b3feb3912806552d7c1abd2b3063c00aef6f158679bbf11653df42bd08e1", + "refined_calls": 1328, + "refined_word_sha256": "e8a99ec2df98eb4564a4c16bcc2f1a08cab30e178473f1278e6a3c0abb19b770" + }, + { + "dirty_arrays": 7, + "factors": 47, + "pr673_calls": 1736, + "pr673_word_sha256": "d5dc18abfc58ca56732ad7936baf582c527c6ff3687174e10610ffa0acfed136", + "refined_calls": 1376, + "refined_word_sha256": "ad2bd691bb6d8ccba2c69478a45bf5866e6c94898ed0c7791dd6ea60750e690d" + }, + { + "dirty_arrays": 7, + "factors": 48, + "pr673_calls": 1760, + "pr673_word_sha256": "93310c1d3bf4f8e09963364564a7c41455d242737f5ae9ada71b49eeba1bfaa2", + "refined_calls": 1472, + "refined_word_sha256": "9ee65c2c3925a6e137b0071f09611ca3a101934247ec69cd5b7f38ffb5d8b7cb" + }, + { + "dirty_arrays": 7, + "factors": 49, + "pr673_calls": 1808, + "pr673_word_sha256": "e9adc9049610538267d80122d7597b5cb6840693b6ad7090b8bf0405c11aa12b", + "refined_calls": 1520, + "refined_word_sha256": "59f027aa161341c210e15ccad0453727c673c4f49df81703c8087237e16f2320" + }, + { + "dirty_arrays": 7, + "factors": 50, + "pr673_calls": 1904, + "pr673_word_sha256": "54f33fc69be0ec0e5f1722ccc37bf0dec62be6dce4be898a24ebfb007edc8ec9", + "refined_calls": 1568, + "refined_word_sha256": "d89bfba7864d296eba363b89e72a27a069e8cf0e29c9a3b11b20e9faa6b6a26c" + }, + { + "dirty_arrays": 7, + "factors": 51, + "pr673_calls": 1952, + "pr673_word_sha256": "a9948e85e91bc7c188b642ae4e9753c8f2e606305de30558fb3a2ed657195bea", + "refined_calls": 1664, + "refined_word_sha256": "19f6849655659198264df6d891238aae49f9a4782b670a50c2b89d520f6ee3fc" + }, + { + "dirty_arrays": 7, + "factors": 52, + "pr673_calls": 1976, + "pr673_word_sha256": "d4c8e5c246a6542a632592dcd30c79e6a9b8089e1db8cea4324f756b643e3f66", + "refined_calls": 1760, + "refined_word_sha256": "89e7d5185a888a056a62b95e38d489c8f638e9712832f531f3b9f6aa01f97840" + }, + { + "dirty_arrays": 7, + "factors": 53, + "pr673_calls": 2024, + "pr673_word_sha256": "f23e1bc533ef68806bc3ca8879d4bbcc434d44788a86c52657d8db2a33d5f9be", + "refined_calls": 1856, + "refined_word_sha256": "88db4d5144760f2015a6fa3a160982f8baa8ccf0f6bfd946e8cba256e2e7d390" + }, + { + "dirty_arrays": 7, + "factors": 54, + "pr673_calls": 2048, + "pr673_word_sha256": "3416fa21ad3d92eab1674297c63c2abd7f18d3a3e96fb711846a1aa634f70432", + "refined_calls": 2048, + "refined_word_sha256": "3416fa21ad3d92eab1674297c63c2abd7f18d3a3e96fb711846a1aa634f70432" + }, + { + "dirty_arrays": 8, + "factors": 55, + "pr673_calls": 2080, + "pr673_word_sha256": "ab07de7a0e1e400ee06fd7140e18e3202529c6898b2e5fafd0ae0b137359a9ea", + "refined_calls": 2080, + "refined_word_sha256": "ab07de7a0e1e400ee06fd7140e18e3202529c6898b2e5fafd0ae0b137359a9ea" + }, + { + "dirty_arrays": 8, + "factors": 56, + "pr673_calls": 2144, + "pr673_word_sha256": "a971fa3fe26564e8b3ca58c6e9713f381579f91ea5e7450c28aa8c9779537abc", + "refined_calls": 2112, + "refined_word_sha256": "4f19178e07e22d2a14b076076d3f2a5daa7f93bb02e2f68892ab8140c2aa1063" + }, + { + "dirty_arrays": 8, + "factors": 57, + "pr673_calls": 2176, + "pr673_word_sha256": "978501aa4286cd0bd2b4b2b062fdd55c0462c6deb65fb98cba18c79c9c83e704", + "refined_calls": 2176, + "refined_word_sha256": "978501aa4286cd0bd2b4b2b062fdd55c0462c6deb65fb98cba18c79c9c83e704" + }, + { + "dirty_arrays": 8, + "factors": 58, + "pr673_calls": 2240, + "pr673_word_sha256": "cfbcf77b676361e848e384a2196a26e500d7a879eab135fff965a8f3e065dd02", + "refined_calls": 2208, + "refined_word_sha256": "9cfc203a71187cdb34364c02ba1ffde90bf1923bf0aa99d3e191fcbf92d9a035" + }, + { + "dirty_arrays": 8, + "factors": 59, + "pr673_calls": 2368, + "pr673_word_sha256": "874ab25749362b14fbe5454f267ae75f6827c75901be9fe887109c1f563e9b45", + "refined_calls": 2240, + "refined_word_sha256": "02b7dddb1472813868cc1566ea3eb920274a985f9873d81996cce13e4fd026e3" + }, + { + "dirty_arrays": 8, + "factors": 60, + "pr673_calls": 2432, + "pr673_word_sha256": "8090488a96d27f646223c2b24d797746a693a17b88013f98f539d063d653f662", + "refined_calls": 2304, + "refined_word_sha256": "4f85153d6b61fb8e836f6d3370b2dd98f043e50fa3a90f3f634c8797b3666647" + }, + { + "dirty_arrays": 8, + "factors": 61, + "pr673_calls": 2464, + "pr673_word_sha256": "5d1526610060ccb74c467e211db17a453107d81429de272022f997a5a5166cc3", + "refined_calls": 2368, + "refined_word_sha256": "64df969f7ab9a0ee0c80e4ea114c61fc0fcbbf7aa386901b7ab56de4d1f42239" + }, + { + "dirty_arrays": 8, + "factors": 62, + "pr673_calls": 2528, + "pr673_word_sha256": "378cc2214c672bf67f2a4dfbd51e079dcfde39a4d455e7f1f8d78688bad72e5a", + "refined_calls": 2432, + "refined_word_sha256": "2cc29d90df9b74994b9f69ac3a60a3756a475b85cf7b5dcae65b9edd63afcb93" + }, + { + "dirty_arrays": 8, + "factors": 63, + "pr673_calls": 2560, + "pr673_word_sha256": "9c7abf5be21db0208e426c0c50566dac1eb908815ac0ed4d5fc55e249dc94bad", + "refined_calls": 2560, + "refined_word_sha256": "9c7abf5be21db0208e426c0c50566dac1eb908815ac0ed4d5fc55e249dc94bad" + }, + { + "dirty_arrays": 8, + "factors": 64, + "pr673_calls": 2624, + "pr673_word_sha256": "463d59c648df40a4bbe372abd499bbe2039ae7800a081f333d211c280190ea29", + "refined_calls": 2592, + "refined_word_sha256": "ef59744d27073d67fe439ad97fb901eb80ff1cacaf91e3462a90601c238705c1" + }, + { + "dirty_arrays": 8, + "factors": 81, + "pr673_calls": 4096, + "pr673_word_sha256": "b1fc6ca4d94517a61126de788964ab9c5f6c7e1f25d1a68842f87fbe320902dc", + "refined_calls": 4096, + "refined_word_sha256": "b1fc6ca4d94517a61126de788964ab9c5f6c7e1f25d1a68842f87fbe320902dc" + }, + { + "dirty_arrays": 9, + "factors": 127, + "pr673_calls": 11872, + "pr673_word_sha256": "df6d2013c79dafb64d7964c468e7f7613f97f7f1cda4b1b14f117d6aabdfb97f", + "refined_calls": 8800, + "refined_word_sha256": "6e8f4ab6d10618578ebb1fa7feada6086dbf569c3b1db85fbf35ab1ebe08b8b7" + }, + { + "dirty_arrays": 9, + "factors": 128, + "pr673_calls": 12064, + "pr673_word_sha256": "36b0a409eb6a2797b1ffefd1423428111b609f6eed5570bafb1c46f4b2c26e75", + "refined_calls": 8896, + "refined_word_sha256": "bebc382a09e91643af92426663a2e982d85717020eacae460f9193e06c30ea0d" + }, + { + "dirty_arrays": 10, + "factors": 243, + "pr673_calls": 32768, + "pr673_word_sha256": "001e6ad199507c82b0c041fb37036e5b9015da962c055c029edd5c84e31123fa", + "refined_calls": 32768, + "refined_word_sha256": "001e6ad199507c82b0c041fb37036e5b9015da962c055c029edd5c84e31123fa" + }, + { + "dirty_arrays": 11, + "factors": 255, + "pr673_calls": 35072, + "pr673_word_sha256": "2179c3febb9e673e60e9e0cd57cb05f7b286c8ff615588943c14e6d39d255263", + "refined_calls": 34688, + "refined_word_sha256": "923cd6628e7e10882b3d5932fb0ef7eacbced1ffc8f1ae302ed1a45f5ab1c6d1" + } + ] + }, + "resources": { + "balanced_size_placements": 23328, + "integer_recurrence_cases": 10000, + "pinned_binary_counts_sha256": "dd3fb51cc312042a6230c1d4b8efa30fef0d2c49cdbca8f0d764eeb5932c5ff8", + "pinned_binary_words": 64, + "strict_improvements_over_pr673": 9919, + "symbolic_words": [ + { + "binary_dirty_arrays": 0, + "binary_leaves": 1, + "dirty_arrays": 0, + "factors": 1, + "ternary_leaves": 1, + "word_sha256": "47d62cf50f4414a1b6669e711cbaf7bb5a21a6196ba5fa67bbd8e2b43a977b48" + }, + { + "binary_dirty_arrays": 1, + "binary_leaves": 4, + "dirty_arrays": 1, + "factors": 2, + "ternary_leaves": 4, + "word_sha256": "e11bfbfbf682fba49120ec63dc76cdc6ef66ddd6349c68b8d85a9832d6101a9f" + }, + { + "binary_dirty_arrays": 2, + "binary_leaves": 10, + "dirty_arrays": 2, + "factors": 3, + "ternary_leaves": 8, + "word_sha256": "c8aaa79b9a7250526e1d81c184d3c0e225af86ca4973105954a63bf4662d67c6" + }, + { + "binary_dirty_arrays": 2, + "binary_leaves": 16, + "dirty_arrays": 3, + "factors": 4, + "ternary_leaves": 14, + "word_sha256": "11205bc3541adeaf0fc9aa01ca8bb246746b201ea7e1d5831b15b644b5147f2b" + }, + { + "binary_dirty_arrays": 3, + "binary_leaves": 28, + "dirty_arrays": 3, + "factors": 5, + "ternary_leaves": 20, + "word_sha256": "af9f492ef9bb95dc0c403d095a998e8c724c0e4673de6615557a516bd0067b4d" + }, + { + "binary_dirty_arrays": 3, + "binary_leaves": 40, + "dirty_arrays": 3, + "factors": 6, + "ternary_leaves": 32, + "word_sha256": "4525988983cbfdc11243b015d632891d88beb8abf703d50880689ebc748b5b01" + }, + { + "binary_dirty_arrays": 3, + "binary_leaves": 52, + "dirty_arrays": 4, + "factors": 7, + "ternary_leaves": 40, + "word_sha256": "befa79d9974e978851d83269a5993cf3828abb284cf3eedb0f7b4e905229b09a" + }, + { + "binary_dirty_arrays": 3, + "binary_leaves": 64, + "dirty_arrays": 4, + "factors": 8, + "ternary_leaves": 48, + "word_sha256": "9d06458a2ae5960f1e7cc406d0705a135719fbf773b95c55b65c4b1ac6b67965" + }, + { + "binary_dirty_arrays": 4, + "binary_leaves": 88, + "dirty_arrays": 4, + "factors": 9, + "ternary_leaves": 64, + "word_sha256": "bf09baf7b74688dbb960edb20e8a5c2847e1528eb0da7c5c87fbfb7ab023c90c" + }, + { + "binary_dirty_arrays": 4, + "binary_leaves": 112, + "dirty_arrays": 5, + "factors": 10, + "ternary_leaves": 76, + "word_sha256": "d79c7fbe43f7081ea76169c9621507cf48a43143fc6a361821736e3156b98a60" + }, + { + "binary_dirty_arrays": 4, + "binary_leaves": 136, + "dirty_arrays": 5, + "factors": 11, + "ternary_leaves": 88, + "word_sha256": "7db9a20f154e7184aa2b3a2d92c9afa6c81ddae2fedd5c7cb6408d7e4fb77789" + }, + { + "binary_dirty_arrays": 4, + "binary_leaves": 160, + "dirty_arrays": 5, + "factors": 12, + "ternary_leaves": 112, + "word_sha256": "2d98824b1fd9e8a4bee1676f7a317d3fbb3f54c8d5484be1d32146c67241d6e4" + }, + { + "binary_dirty_arrays": 4, + "binary_leaves": 184, + "dirty_arrays": 5, + "factors": 13, + "ternary_leaves": 124, + "word_sha256": "6d9d2dc3a29d55bdae0c6e466bed7a70575d0c391b27b735559c48a7d6a2d12d" + }, + { + "binary_dirty_arrays": 4, + "binary_leaves": 208, + "dirty_arrays": 5, + "factors": 14, + "ternary_leaves": 136, + "word_sha256": "e3a39cffe0b25e961aaead52dc32dcdeaf93286dd43e2bddaddee361b1c9257f" + }, + { + "binary_dirty_arrays": 4, + "binary_leaves": 232, + "dirty_arrays": 5, + "factors": 15, + "ternary_leaves": 160, + "word_sha256": "5fabead59c843454c9e55f99fc371f8c3fec157782b45a1ef9416bcf54813d3e" + }, + { + "binary_dirty_arrays": 4, + "binary_leaves": 256, + "dirty_arrays": 5, + "factors": 16, + "ternary_leaves": 184, + "word_sha256": "b7729b8159afb0e82af7571553741652c883db518679a8a29a51af19e27f0ce7" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 304, + "dirty_arrays": 5, + "factors": 17, + "ternary_leaves": 208, + "word_sha256": "bc0b09d30724aff9d645f52bf6a92a181eb2d242a1261f51a2b1bbc0fd3e3efb" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 352, + "dirty_arrays": 5, + "factors": 18, + "ternary_leaves": 256, + "word_sha256": "fe82fc3ee26fb16e89232bbf06b62c9a8e0bbd3141b3fefb8c86110e1e384616" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 400, + "dirty_arrays": 6, + "factors": 19, + "ternary_leaves": 272, + "word_sha256": "5737bb12cc1b2339854a04072fd20cf091c1da032dcafe84c44a5da2825e765b" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 448, + "dirty_arrays": 6, + "factors": 20, + "ternary_leaves": 288, + "word_sha256": "94e8d5bbf2ce4a5851491dcc9c092076ee014cd35d696f05ff1999511a2c5529" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 496, + "dirty_arrays": 6, + "factors": 21, + "ternary_leaves": 320, + "word_sha256": "34b29a1d9d810eb31b2af7c5fa9222c98db654c0e736a3d381f4d623388fd34c" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 544, + "dirty_arrays": 6, + "factors": 22, + "ternary_leaves": 336, + "word_sha256": "00608b1fbc30e0ecb100745fd2d0a8fd119208926c1ad19e251d63ab9f14720b" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 592, + "dirty_arrays": 6, + "factors": 23, + "ternary_leaves": 352, + "word_sha256": "f6aab5099f84d405804542ad193391d7932007b11c60fd7c018ebb295c46e128" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 640, + "dirty_arrays": 6, + "factors": 24, + "ternary_leaves": 384, + "word_sha256": "34ac9b6c67b9fba6959aac4639eae77c5b2f88655cf8fa427d4b1b4aeee1c961" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 688, + "dirty_arrays": 6, + "factors": 25, + "ternary_leaves": 416, + "word_sha256": "b6870067485410483d892b65cec57d3182c60fb10ebbf968c8e8533ae0839f14" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 736, + "dirty_arrays": 6, + "factors": 26, + "ternary_leaves": 448, + "word_sha256": "b87105307bc4d006358d2d2769515b72909dbf0ae6589c872c0ac48a010aa0ee" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 784, + "dirty_arrays": 6, + "factors": 27, + "ternary_leaves": 512, + "word_sha256": "b63769a70d7a6c46b42fae51be9a33b4a415e979949857a9b2ebd6effc2825a0" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 832, + "dirty_arrays": 7, + "factors": 28, + "ternary_leaves": 536, + "word_sha256": "1a05ef43612769fa105d16f5092dc11aedd395ec46679078d6918e09ed27429f" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 880, + "dirty_arrays": 7, + "factors": 29, + "ternary_leaves": 560, + "word_sha256": "52557be5628b439704ba915a5aa5c59c3775455f8e18cd32c4cab797654d6ea8" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 928, + "dirty_arrays": 7, + "factors": 30, + "ternary_leaves": 608, + "word_sha256": "4f270e20282a1d31cbc71bfb9646e571235c28074357e98da039b4016b1734b6" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 976, + "dirty_arrays": 7, + "factors": 31, + "ternary_leaves": 632, + "word_sha256": "32de315859fe6db4abd891c95549be24ed9cde1177b307ac27869d80da78ed33" + }, + { + "binary_dirty_arrays": 5, + "binary_leaves": 1024, + "dirty_arrays": 7, + "factors": 32, + "ternary_leaves": 656, + "word_sha256": "09285ed2d8d058ee7d133d89e6029eea1d2e47f9a81692353ae02949c11d649e" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1120, + "dirty_arrays": 7, + "factors": 33, + "ternary_leaves": 704, + "word_sha256": "882b576f751cb23e26b5de416f6a3bee957530bcf3bf5472905af1ad3134162a" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1216, + "dirty_arrays": 7, + "factors": 34, + "ternary_leaves": 752, + "word_sha256": "9200b5931d8aa8950ec4cf0664534b870bd7fbaf153482fa7d07ca9175614e61" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1312, + "dirty_arrays": 7, + "factors": 35, + "ternary_leaves": 800, + "word_sha256": "b8fb5f47698a28e420487d13d0171a1331da19461aa6af4a657daab64cd1d7a9" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1408, + "dirty_arrays": 7, + "factors": 36, + "ternary_leaves": 896, + "word_sha256": "74a01ecec13104d813baf5477d209ce9f88256a1efe089600fefda16611990c9" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1504, + "dirty_arrays": 7, + "factors": 37, + "ternary_leaves": 920, + "word_sha256": "fd4c0c3777fa0f79bca5510c6a32814814a4296db2e7be8e4faefb223cc4401a" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1600, + "dirty_arrays": 7, + "factors": 38, + "ternary_leaves": 944, + "word_sha256": "521c78ed32794fdbff5c50ea20cf27485e00d6f946f2e5f446f8fdb2821e8449" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1696, + "dirty_arrays": 7, + "factors": 39, + "ternary_leaves": 992, + "word_sha256": "8719441a1a7adef72292b1860fb9d42e997ba4287701cb8c055f4117d638d060" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1792, + "dirty_arrays": 7, + "factors": 40, + "ternary_leaves": 1016, + "word_sha256": "3bc39f55cf5e54eb21e0638348f3221bc1820f3cbbe809d696ffa4e94db73c52" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1888, + "dirty_arrays": 7, + "factors": 41, + "ternary_leaves": 1040, + "word_sha256": "9c8cf473eb4a27c8be33adef08698b274ec6ce9da32f8edb565ed8e51dc223db" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 1984, + "dirty_arrays": 7, + "factors": 42, + "ternary_leaves": 1088, + "word_sha256": "15756dd471e6ad68796dea432cd9fffbee3b6160409493c878f217b54a508151" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2080, + "dirty_arrays": 7, + "factors": 43, + "ternary_leaves": 1136, + "word_sha256": "587dc9a7525789d55c980065a5b4c1287bbe6351bd4c8e53d0a88d307c2af4be" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2176, + "dirty_arrays": 7, + "factors": 44, + "ternary_leaves": 1184, + "word_sha256": "a0f2f55b12900320b6e60a8456e7f7f1a11a5760d6ac8e13e80340e20e817add" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2272, + "dirty_arrays": 7, + "factors": 45, + "ternary_leaves": 1280, + "word_sha256": "17b81e2930b404bca5bb527334167bc86819a68a73f49922d7c90e2b399788c5" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2368, + "dirty_arrays": 7, + "factors": 46, + "ternary_leaves": 1328, + "word_sha256": "e8a99ec2df98eb4564a4c16bcc2f1a08cab30e178473f1278e6a3c0abb19b770" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2464, + "dirty_arrays": 7, + "factors": 47, + "ternary_leaves": 1376, + "word_sha256": "ad2bd691bb6d8ccba2c69478a45bf5866e6c94898ed0c7791dd6ea60750e690d" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2560, + "dirty_arrays": 7, + "factors": 48, + "ternary_leaves": 1472, + "word_sha256": "9ee65c2c3925a6e137b0071f09611ca3a101934247ec69cd5b7f38ffb5d8b7cb" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2656, + "dirty_arrays": 7, + "factors": 49, + "ternary_leaves": 1520, + "word_sha256": "59f027aa161341c210e15ccad0453727c673c4f49df81703c8087237e16f2320" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2752, + "dirty_arrays": 7, + "factors": 50, + "ternary_leaves": 1568, + "word_sha256": "d89bfba7864d296eba363b89e72a27a069e8cf0e29c9a3b11b20e9faa6b6a26c" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2848, + "dirty_arrays": 7, + "factors": 51, + "ternary_leaves": 1664, + "word_sha256": "19f6849655659198264df6d891238aae49f9a4782b670a50c2b89d520f6ee3fc" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 2944, + "dirty_arrays": 7, + "factors": 52, + "ternary_leaves": 1760, + "word_sha256": "89e7d5185a888a056a62b95e38d489c8f638e9712832f531f3b9f6aa01f97840" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3040, + "dirty_arrays": 7, + "factors": 53, + "ternary_leaves": 1856, + "word_sha256": "88db4d5144760f2015a6fa3a160982f8baa8ccf0f6bfd946e8cba256e2e7d390" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3136, + "dirty_arrays": 7, + "factors": 54, + "ternary_leaves": 2048, + "word_sha256": "3416fa21ad3d92eab1674297c63c2abd7f18d3a3e96fb711846a1aa634f70432" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3232, + "dirty_arrays": 8, + "factors": 55, + "ternary_leaves": 2080, + "word_sha256": "ab07de7a0e1e400ee06fd7140e18e3202529c6898b2e5fafd0ae0b137359a9ea" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3328, + "dirty_arrays": 8, + "factors": 56, + "ternary_leaves": 2112, + "word_sha256": "4f19178e07e22d2a14b076076d3f2a5daa7f93bb02e2f68892ab8140c2aa1063" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3424, + "dirty_arrays": 8, + "factors": 57, + "ternary_leaves": 2176, + "word_sha256": "978501aa4286cd0bd2b4b2b062fdd55c0462c6deb65fb98cba18c79c9c83e704" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3520, + "dirty_arrays": 8, + "factors": 58, + "ternary_leaves": 2208, + "word_sha256": "9cfc203a71187cdb34364c02ba1ffde90bf1923bf0aa99d3e191fcbf92d9a035" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3616, + "dirty_arrays": 8, + "factors": 59, + "ternary_leaves": 2240, + "word_sha256": "02b7dddb1472813868cc1566ea3eb920274a985f9873d81996cce13e4fd026e3" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3712, + "dirty_arrays": 8, + "factors": 60, + "ternary_leaves": 2304, + "word_sha256": "4f85153d6b61fb8e836f6d3370b2dd98f043e50fa3a90f3f634c8797b3666647" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3808, + "dirty_arrays": 8, + "factors": 61, + "ternary_leaves": 2368, + "word_sha256": "64df969f7ab9a0ee0c80e4ea114c61fc0fcbbf7aa386901b7ab56de4d1f42239" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 3904, + "dirty_arrays": 8, + "factors": 62, + "ternary_leaves": 2432, + "word_sha256": "2cc29d90df9b74994b9f69ac3a60a3756a475b85cf7b5dcae65b9edd63afcb93" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 4000, + "dirty_arrays": 8, + "factors": 63, + "ternary_leaves": 2560, + "word_sha256": "9c7abf5be21db0208e426c0c50566dac1eb908815ac0ed4d5fc55e249dc94bad" + }, + { + "binary_dirty_arrays": 6, + "binary_leaves": 4096, + "dirty_arrays": 8, + "factors": 64, + "ternary_leaves": 2592, + "word_sha256": "ef59744d27073d67fe439ad97fb901eb80ff1cacaf91e3462a90601c238705c1" + }, + { + "binary_dirty_arrays": 7, + "binary_leaves": 7360, + "dirty_arrays": 8, + "factors": 81, + "ternary_leaves": 4096, + "word_sha256": "b1fc6ca4d94517a61126de788964ab9c5f6c7e1f25d1a68842f87fbe320902dc" + }, + { + "binary_dirty_arrays": 7, + "binary_leaves": 16384, + "dirty_arrays": 9, + "factors": 128, + "ternary_leaves": 8896, + "word_sha256": "bebc382a09e91643af92426663a2e982d85717020eacae460f9193e06c30ea0d" + }, + { + "binary_dirty_arrays": 8, + "binary_leaves": 60544, + "dirty_arrays": 10, + "factors": 243, + "ternary_leaves": 32768, + "word_sha256": "001e6ad199507c82b0c041fb37036e5b9015da962c055c029edd5c84e31123fa" + } + ] + }, + "rounded": [ + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 1, + "lift_loop_visits": 3, + "net_sha256": "89181029d122af50ec9475f447ba6d45575633cde5257ec2787f0d294e404cd5", + "phase_reads": 4, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 75 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 1, + "lift_loop_visits": 3, + "net_sha256": "67b8812363bd1af8bfe328b8a86863beef202343641e3dece1eb4e9055bfdab8", + "phase_reads": 4, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 76 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 1, + "lift_loop_visits": 3, + "net_sha256": "89181029d122af50ec9475f447ba6d45575633cde5257ec2787f0d294e404cd5", + "phase_reads": 4, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 75 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 1, + "lift_loop_visits": 3, + "net_sha256": "67b8812363bd1af8bfe328b8a86863beef202343641e3dece1eb4e9055bfdab8", + "phase_reads": 4, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 76 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 2, + "lift_loop_visits": 6, + "net_sha256": "60ddd0f5ef15954766450bcca0b57fead690112ab9872ed14e23c4f317bdf474", + "phase_reads": 10, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 75 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 2, + "lift_loop_visits": 6, + "net_sha256": "95e311df292eeef91c6a0b43eadbe8989bec7ba780e8f77227499b2a11f97c8c", + "phase_reads": 10, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 76 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 2, + "lift_loop_visits": 6, + "net_sha256": "9562c1b83f9ef95128cde2b5937e41aa94d383793b2f6b9efc62556d6b46a0eb", + "phase_reads": 10, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 75 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 2, + "lift_loop_visits": 6, + "net_sha256": "b361f61b2ef348f13340c51c566f469d9200173da0c634f7de7b70c837373bd0", + "phase_reads": 10, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 76 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 4, + "lift_loop_visits": 12, + "net_sha256": "54b3bc6436e7fdb9e916d87f2ea9140851b965f3db40c5a3a2283523aae6896a", + "phase_reads": 22, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 76 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 4, + "lift_loop_visits": 12, + "net_sha256": "54b3bc6436e7fdb9e916d87f2ea9140851b965f3db40c5a3a2283523aae6896a", + "phase_reads": 22, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 76 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 4, + "lift_loop_visits": 12, + "net_sha256": "b887402d99a5c8d645936fa6b9e2762d2014df570e92532d2e6b1b9d80903392", + "phase_reads": 22, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 76 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 0, + "factors": 1, + "leaves": 1, + "length": 4, + "lift_loop_visits": 12, + "net_sha256": "b887402d99a5c8d645936fa6b9e2762d2014df570e92532d2e6b1b9d80903392", + "phase_reads": 22, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 76 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 1, + "lift_loop_visits": 12, + "net_sha256": "0cf44a41cf4c82f6a3a461b55082400d6816ca40209b150ab25c8fe2588b23d4", + "phase_reads": 14, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 86 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 1, + "lift_loop_visits": 12, + "net_sha256": "0cf44a41cf4c82f6a3a461b55082400d6816ca40209b150ab25c8fe2588b23d4", + "phase_reads": 14, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 87 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 1, + "lift_loop_visits": 12, + "net_sha256": "0cf44a41cf4c82f6a3a461b55082400d6816ca40209b150ab25c8fe2588b23d4", + "phase_reads": 14, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 86 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 1, + "lift_loop_visits": 12, + "net_sha256": "0cf44a41cf4c82f6a3a461b55082400d6816ca40209b150ab25c8fe2588b23d4", + "phase_reads": 14, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 87 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 2, + "lift_loop_visits": 24, + "net_sha256": "f665b8c2c2797defba5d291edaeb9d357a5d94cf9b6a2001b17963eaeca349e8", + "phase_reads": 36, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 86 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 2, + "lift_loop_visits": 24, + "net_sha256": "01999ba7b56bf26787792099430c38d7fd6a8ba3d0e448f520bd66cd3e8a0598", + "phase_reads": 36, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 87 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 2, + "lift_loop_visits": 24, + "net_sha256": "f665b8c2c2797defba5d291edaeb9d357a5d94cf9b6a2001b17963eaeca349e8", + "phase_reads": 36, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 86 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 2, + "lift_loop_visits": 24, + "net_sha256": "d1c5926f95a50661e83f2659e7eba390365565a5ad34999cf9fb98cfb81489a0", + "phase_reads": 36, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 87 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 4, + "lift_loop_visits": 48, + "net_sha256": "8969803c08be0410f982df4401458d5aab80688a237f144630b4f101fec240af", + "phase_reads": 80, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 87 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 4, + "lift_loop_visits": 48, + "net_sha256": "6053254be0438757d1da94779ec84746b8b0bc6667de8394da9de876bd8f73f4", + "phase_reads": 80, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 87 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 4, + "lift_loop_visits": 48, + "net_sha256": "c2001203e2990127f8c1daca1b214fa0a09a7f865c8806c7a71ee29a09b29e5b", + "phase_reads": 80, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 87 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 1, + "factors": 2, + "leaves": 4, + "length": 4, + "lift_loop_visits": 48, + "net_sha256": "3091c2f5fb9603be3e48492613dc091ddcdaf105fe08e396f6995dd2b98971d3", + "phase_reads": 80, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 87 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 1, + "lift_loop_visits": 24, + "net_sha256": "a0636ea8cd9e31177c65f28a57c37b40ac18d75f6dcfad61c3986940c65a46f0", + "phase_reads": 28, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 99 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 1, + "lift_loop_visits": 24, + "net_sha256": "356670dc0a4f151774df82f21c2a806041bbf8eb5570a77184d80f187896e6ab", + "phase_reads": 28, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 100 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 1, + "lift_loop_visits": 24, + "net_sha256": "a0636ea8cd9e31177c65f28a57c37b40ac18d75f6dcfad61c3986940c65a46f0", + "phase_reads": 28, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 99 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 1, + "lift_loop_visits": 24, + "net_sha256": "356670dc0a4f151774df82f21c2a806041bbf8eb5570a77184d80f187896e6ab", + "phase_reads": 28, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 100 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 2, + "lift_loop_visits": 48, + "net_sha256": "09164ec4b57fa17e9b0c9086b5e5d3bca696ae7e372138c024e87ef332e9d1bf", + "phase_reads": 72, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 100 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 2, + "lift_loop_visits": 48, + "net_sha256": "ec1fe6a56893fa95e0f775e71bf1238311b8ebed43545ce749b57fbdd6589012", + "phase_reads": 72, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 100 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 2, + "lift_loop_visits": 48, + "net_sha256": "96827176d8339431ed862fe62be6569b2e87afa3bd2b8474badb9b994dceb23b", + "phase_reads": 72, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 100 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 2, + "lift_loop_visits": 48, + "net_sha256": "5ae652dbbb6b6173746f102a33d3e074cb902bf1c075913b44ab715073c889ad", + "phase_reads": 72, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 100 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 4, + "lift_loop_visits": 96, + "net_sha256": "941450e46687ed6563319e47df7324001d7f675debf761e772e81daaa8d88952", + "phase_reads": 160, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 100 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 4, + "lift_loop_visits": 96, + "net_sha256": "baa799ea989eacea129a79d901d057659f923b870168b9150f3ca37ed2e2d18e", + "phase_reads": 160, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 101 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 4, + "lift_loop_visits": 96, + "net_sha256": "1b2a7fe52c189cb834d137ae4db24cb03aa26733064aa31cb25e1040b9367ecc", + "phase_reads": 160, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 100 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 2, + "factors": 3, + "leaves": 8, + "length": 4, + "lift_loop_visits": 96, + "net_sha256": "0cde6a42b63175796642dab9a1571a3b71e2f37ea9da139a3231fb8c262ad953", + "phase_reads": 160, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 101 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 1, + "lift_loop_visits": 42, + "net_sha256": "e2c5aba6b783f97f6f512fe2451f6d1029bb838366e613bbfa3c726206684def", + "phase_reads": 50, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 118 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 1, + "lift_loop_visits": 42, + "net_sha256": "e2c5aba6b783f97f6f512fe2451f6d1029bb838366e613bbfa3c726206684def", + "phase_reads": 50, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 1, + "lift_loop_visits": 42, + "net_sha256": "e2c5aba6b783f97f6f512fe2451f6d1029bb838366e613bbfa3c726206684def", + "phase_reads": 50, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 118 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 1, + "lift_loop_visits": 42, + "net_sha256": "e2c5aba6b783f97f6f512fe2451f6d1029bb838366e613bbfa3c726206684def", + "phase_reads": 50, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 2, + "lift_loop_visits": 84, + "net_sha256": "42b0fd490d02bb0e6fbd4a77895cdb71fc2a13059736ad33af814feced505e07", + "phase_reads": 128, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 2, + "lift_loop_visits": 84, + "net_sha256": "c916c25c271c22f9b0c54ac8b5eccdb1b50012cc2b1dc93d27ef14c49271620e", + "phase_reads": 128, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 2, + "lift_loop_visits": 84, + "net_sha256": "4d586f813b75297387f63f637fc5f35959f4796fdfeb1e4d75b132a8191d6512", + "phase_reads": 128, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 2, + "lift_loop_visits": 84, + "net_sha256": "4d586f813b75297387f63f637fc5f35959f4796fdfeb1e4d75b132a8191d6512", + "phase_reads": 128, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 4, + "lift_loop_visits": 168, + "net_sha256": "577672db25490f7737b3cf1d4ac86913e26bbb7a27dbfc59f3458cef6898d0f0", + "phase_reads": 284, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 4, + "lift_loop_visits": 168, + "net_sha256": "1dc8611d7a0b9cadc81039dffc81a5b0b3d79308d5f8de03b35993c812b5a277", + "phase_reads": 284, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 4, + "lift_loop_visits": 168, + "net_sha256": "b206d829121f1932f78f1877343b92aeb1636980b3262ef6ee00d3cbc2aac686", + "phase_reads": 284, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 4, + "leaves": 14, + "length": 4, + "lift_loop_visits": 168, + "net_sha256": "e70bbb7036e75d64e1af0382d07793372608061956f3420df8185792ac3ee6dd", + "phase_reads": 284, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 119 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 1, + "lift_loop_visits": 60, + "net_sha256": "7b454c8cf3a6a82538454a7ba7ea7fae795469d2e0f2e0359ec516d3341a0f1a", + "phase_reads": 72, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 137 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 1, + "lift_loop_visits": 60, + "net_sha256": "693656196634af83ba8422f7afec153f2252d9ee0c0c644fc150bc282778481e", + "phase_reads": 72, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 138 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 1, + "lift_loop_visits": 60, + "net_sha256": "7b454c8cf3a6a82538454a7ba7ea7fae795469d2e0f2e0359ec516d3341a0f1a", + "phase_reads": 72, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 137 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 1, + "lift_loop_visits": 60, + "net_sha256": "693656196634af83ba8422f7afec153f2252d9ee0c0c644fc150bc282778481e", + "phase_reads": 72, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 138 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 2, + "lift_loop_visits": 120, + "net_sha256": "ce2744c87a5b5230550559398994cd236fa3031820f2f6b89dabdefaf65adaf0", + "phase_reads": 184, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 137 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 2, + "lift_loop_visits": 120, + "net_sha256": "22b8817d702b5ae3831b8a839025e504b8c3b321abee1b61a99250239fac6dfc", + "phase_reads": 184, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 138 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 2, + "lift_loop_visits": 120, + "net_sha256": "2f5277dcae90fa4f9d8a13fa8015ce7cfdcbf3d3257398035a83d2c907f5bb70", + "phase_reads": 184, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 137 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 2, + "lift_loop_visits": 120, + "net_sha256": "31ae20101161f3bc547a19591bf0b20fb7818508de26461aedb7273920660165", + "phase_reads": 184, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 138 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 4, + "lift_loop_visits": 240, + "net_sha256": "e98330933b61e58f21c3d0d488cef91b1772690b77885e99d2766180cb85881a", + "phase_reads": 408, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 138 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 4, + "lift_loop_visits": 240, + "net_sha256": "da84d5cb30d8c8c156cffc04d88e375f635c1a9c28909cb642f174a64d1e4e64", + "phase_reads": 408, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 138 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 4, + "lift_loop_visits": 240, + "net_sha256": "0b929f214be4418ea358776629335153c50f4a2ea65fa668c8567a7d4ee538b4", + "phase_reads": 408, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 138 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 3, + "factors": 5, + "leaves": 20, + "length": 4, + "lift_loop_visits": 240, + "net_sha256": "b8007badf65906ba4a7a05c510b726c9b71f6ba15f1f89c82e2897a1899edaac", + "phase_reads": 408, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 138 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "cb3d69e36fd731dc242c3657208c544a3f0b9787b2dca84f42e95d781d520473", + "phase_reads": 168, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 222 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "8976aeed642ae74fd0b75bb707c4f335e4ef5380a3c56f7fba5053f793059dd2", + "phase_reads": 168, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "cb3d69e36fd731dc242c3657208c544a3f0b9787b2dca84f42e95d781d520473", + "phase_reads": 168, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 222 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 1, + "lift_loop_visits": 144, + "net_sha256": "8976aeed642ae74fd0b75bb707c4f335e4ef5380a3c56f7fba5053f793059dd2", + "phase_reads": 168, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 2, + "lift_loop_visits": 288, + "net_sha256": "f4b4e5bc841c79bb811782d8e7dded832be9d9bda49818358edb3069abf2da1b", + "phase_reads": 432, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 2, + "lift_loop_visits": 288, + "net_sha256": "2f5560a977c4e0c0aa7cc46263cc2a69f101479ca7422e94af39e3da67a93b73", + "phase_reads": 432, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 2, + "lift_loop_visits": 288, + "net_sha256": "f4b4e5bc841c79bb811782d8e7dded832be9d9bda49818358edb3069abf2da1b", + "phase_reads": 432, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 2, + "lift_loop_visits": 288, + "net_sha256": "29a61ec664f7d03f11f96c092b3072c5d8596867d8c430f12f30d23d362f68e4", + "phase_reads": 432, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 4, + "lift_loop_visits": 576, + "net_sha256": "e5564e8d363c01ca30a4b20dd4caa09c5b72c01c16b1964b2c5f0d4106b2c3d3", + "phase_reads": 960, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 4, + "lift_loop_visits": 576, + "net_sha256": "f97dd1b35b04856e04c04316e6e400f8575fe30d07ab8236d29fe4ed7aafbe8b", + "phase_reads": 960, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 4, + "lift_loop_visits": 576, + "net_sha256": "6167aa8da84c14fde0f1ed2933b0585cac21c166b5513b3716cc3a330166cdb9", + "phase_reads": 960, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 8, + "leaves": 48, + "length": 4, + "lift_loop_visits": 576, + "net_sha256": "dbda2c9de7b273c130e95b0db9b6f04a7b212292b3bb96ad4319f7166c19f0a5", + "phase_reads": 960, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 223 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 1, + "lift_loop_visits": 192, + "net_sha256": "5928860be28a7f9ef93c41e84eb855ae3d81342f7ec16496b13456d7dbf7c360", + "phase_reads": 224, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 271 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 1, + "lift_loop_visits": 192, + "net_sha256": "d2a02c78c18ae2b233c836690e4ea1a42528141033af14864e28f0decc84a460", + "phase_reads": 224, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 271 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 1, + "lift_loop_visits": 192, + "net_sha256": "5928860be28a7f9ef93c41e84eb855ae3d81342f7ec16496b13456d7dbf7c360", + "phase_reads": 224, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 271 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 1, + "lift_loop_visits": 192, + "net_sha256": "d2a02c78c18ae2b233c836690e4ea1a42528141033af14864e28f0decc84a460", + "phase_reads": 224, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 271 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 2, + "lift_loop_visits": 384, + "net_sha256": "03061b3238282323f8117e1e0c7508d687fdf2685eedea44461cb5f783f17022", + "phase_reads": 576, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 271 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 2, + "lift_loop_visits": 384, + "net_sha256": "7ba2b70ecc35a9003859ee24b7c5175a1a1ce7dcbc5627bcbb8cbbe711fe6e6a", + "phase_reads": 576, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 271 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 2, + "lift_loop_visits": 384, + "net_sha256": "9d2d5ee0b9e47403bee696abf15137981a3b3406f169ff7fa87e503d38f06b87", + "phase_reads": 576, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 271 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 2, + "lift_loop_visits": 384, + "net_sha256": "544bde4d6ac84edbb7c0080e4643d70eceb8c1c2a133244d997fb365f1c0d8f5", + "phase_reads": 576, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 271 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 4, + "lift_loop_visits": 768, + "net_sha256": "f3461d062964309b23af314597b3b3d2922e005863841192f0241a9a69a3e91d", + "phase_reads": 1280, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 272 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 4, + "lift_loop_visits": 768, + "net_sha256": "20cdc8e4654100d47646dabe03f264965c8fe7c6de1d4b8500d673b3a73c7b99", + "phase_reads": 1280, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 272 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 4, + "lift_loop_visits": 768, + "net_sha256": "3b8fd1e18194f555a334faf591ff8e4a6f727e7e602bf6c8f0861e94f669f5d5", + "phase_reads": 1280, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 272 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 4, + "factors": 9, + "leaves": 64, + "length": 4, + "lift_loop_visits": 768, + "net_sha256": "f3d99d58402a641de56f36e77d8a5eb0f27b4c1d6a7d5ae13c8939830c2c7a8e", + "phase_reads": 1280, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 272 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 1, + "lift_loop_visits": 480, + "net_sha256": "b69c0ca845fe9feee28c02f2b9459738bb1ca2864263a2b4839f8c25b05da20d", + "phase_reads": 560, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 560 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 1, + "lift_loop_visits": 480, + "net_sha256": "4bb4b26ca2aa13d6c3462a160f6577df17d0a5651485f498ad47cf45e36aefdc", + "phase_reads": 560, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 561 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 1, + "lift_loop_visits": 480, + "net_sha256": "b69c0ca845fe9feee28c02f2b9459738bb1ca2864263a2b4839f8c25b05da20d", + "phase_reads": 560, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 560 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 1, + "lift_loop_visits": 480, + "net_sha256": "4bb4b26ca2aa13d6c3462a160f6577df17d0a5651485f498ad47cf45e36aefdc", + "phase_reads": 560, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 561 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 2, + "lift_loop_visits": 960, + "net_sha256": "2f2ba442c7c74ebe6e5c438773901eb57036c824e24be46ceee96e8f60809dbe", + "phase_reads": 1440, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 560 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 2, + "lift_loop_visits": 960, + "net_sha256": "907fd408339684fe6937d903d9c740ea10bacfec51402581e24d7b8e48d83912", + "phase_reads": 1440, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 561 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 2, + "lift_loop_visits": 960, + "net_sha256": "a7b78d92c7a35c466938319edd972519d0a55c2673adb9183b1169da6f9a3a12", + "phase_reads": 1440, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 560 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 2, + "lift_loop_visits": 960, + "net_sha256": "0a22947f248e71afb4c0d1aa8db2f67c2075f9f71adc559ce749beb1a0423100", + "phase_reads": 1440, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 561 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 4, + "lift_loop_visits": 1920, + "net_sha256": "8c0946c892bb60d4cab7be96d49ec2d2cfd43713cac230c9f17599c4b1d09b6e", + "phase_reads": 3200, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 561 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 4, + "lift_loop_visits": 1920, + "net_sha256": "6ca5f871500c71dec7bf8d953d5fb5e4cbc115091fc5c713e7f88e1309a63e6d", + "phase_reads": 3200, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 561 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 4, + "lift_loop_visits": 1920, + "net_sha256": "fac29c1b9b1a1aa8ba8257829b49696d39b17438389d1c43d04e8fd9abd0cb77", + "phase_reads": 3200, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 561 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 5, + "factors": 15, + "leaves": 160, + "length": 4, + "lift_loop_visits": 1920, + "net_sha256": "0387c16842d8786d882815ca0eb677b68b95eef5bb04628a0a3ac8eec6c0db28", + "phase_reads": 3200, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 561 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 1, + "lift_loop_visits": 1536, + "net_sha256": "c61f8aa76142f1dbf5305ea9a4e76b3af19475f71c86f4d3e6ee7c6b70ac1ecb", + "phase_reads": 1792, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1618 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 1, + "lift_loop_visits": 1536, + "net_sha256": "00a7e3a4fa60925d289e036cb28ba14495be075c076f4833baa9a12b78f2250b", + "phase_reads": 1792, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1618 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 1, + "lift_loop_visits": 1536, + "net_sha256": "c61f8aa76142f1dbf5305ea9a4e76b3af19475f71c86f4d3e6ee7c6b70ac1ecb", + "phase_reads": 1792, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1618 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 1, + "lift_loop_visits": 1536, + "net_sha256": "00a7e3a4fa60925d289e036cb28ba14495be075c076f4833baa9a12b78f2250b", + "phase_reads": 1792, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1618 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 2, + "lift_loop_visits": 3072, + "net_sha256": "0e7a9f2b18a093c9d4b07b7ee2f21f7b1c76d8cb236bfe4ab83d8eade8162766", + "phase_reads": 4608, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1618 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 2, + "lift_loop_visits": 3072, + "net_sha256": "5ce81f85305fe4c35eebebc332906c5c5512eacbfa2e8f7ca694cdd5c478f819", + "phase_reads": 4608, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1619 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 2, + "lift_loop_visits": 3072, + "net_sha256": "e9d4e86758453356e897bf3d83bca9ba42c39e560ae59a007c0c0b5d65ecf572", + "phase_reads": 4608, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1618 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 2, + "lift_loop_visits": 3072, + "net_sha256": "e75b5d3e772da71dac4ac51e374338d465c2eee49ef21c951f45858d60f65ddc", + "phase_reads": 4608, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1619 + }, + { + "direction": -1, + "dirt": 0, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 4, + "lift_loop_visits": 6144, + "net_sha256": "772728fed4d19b1d6f5ddba6e8f66f32135c5f729e6fa3bc3b5f885a3c430660", + "phase_reads": 10240, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1619 + }, + { + "direction": -1, + "dirt": 7, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 4, + "lift_loop_visits": 6144, + "net_sha256": "a9abe19c749d5f5a38c59e4a8298440134f96d3442aad829f46e1caa93e9906f", + "phase_reads": 10240, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1619 + }, + { + "direction": 1, + "dirt": 0, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 4, + "lift_loop_visits": 6144, + "net_sha256": "17e680566210ca6a14d2ed474473f3c1972cd6b110fe74a9283f05cf25ecb5b9", + "phase_reads": 10240, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1619 + }, + { + "direction": 1, + "dirt": 7, + "dirty_arrays": 6, + "factors": 27, + "leaves": 512, + "length": 4, + "lift_loop_visits": 6144, + "net_sha256": "b305f39e5601cb78ba5d588a829e6423b3526d37f659a15fcbebd09e52235713", + "phase_reads": 10240, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 1619 + }, + { + "direction": -1, + "dirt": -13, + "dirty_arrays": 8, + "factors": 58, + "leaves": 2208, + "length": 1, + "lift_loop_visits": 6624, + "net_sha256": "ab6a4c3df320b2873f4260acf2ab33b8a623f26cb640255af9ca196dd25a24af", + "phase_reads": 7728, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 6709 + }, + { + "direction": 1, + "dirt": -13, + "dirty_arrays": 8, + "factors": 58, + "leaves": 2208, + "length": 1, + "lift_loop_visits": 6624, + "net_sha256": "ab6a4c3df320b2873f4260acf2ab33b8a623f26cb640255af9ca196dd25a24af", + "phase_reads": 7728, + "spectator_arrays": 1, + "target_bits": 64, + "working_bits": 6709 + } + ], + "sources": { + "base_commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "pr628_commit": "0768f97d06c623b8211e651543c66135796b62bf", + "pr673_commit": "0e35f56cab3cae1eb0a99447135569d687c5695a", + "source_files": 12 + }, + "status": "PASS_TERNARY_DIRTY_COMPOSITION", + "uniform_precision": { + "cases": 621, + "examples": [ + { + "binary_exact_working_bits": 680, + "dirt_bits": 20, + "dirty_arrays": 2, + "inherited_4n2_working_bits": 1826, + "leaves": 8, + "prepared_target_bits": 149, + "radix": 4, + "target_bits": 128, + "working_bits": 591 + }, + { + "binary_exact_working_bits": 31106, + "dirt_bits": 20, + "dirty_arrays": 4, + "inherited_4n2_working_bits": 121156, + "leaves": 48, + "prepared_target_bits": 149, + "radix": 9, + "target_bits": 128, + "working_bits": 23602 + }, + { + "binary_exact_working_bits": 461599, + "dirt_bits": 20, + "dirty_arrays": 5, + "inherited_4n2_working_bits": 1778897, + "leaves": 160, + "prepared_target_bits": 149, + "radix": 16, + "target_bits": 128, + "working_bits": 319615 + }, + { + "binary_exact_working_bits": 516978511, + "dirt_bits": 20, + "dirty_arrays": 8, + "inherited_4n2_working_bits": 2051120193, + "leaves": 2560, + "prepared_target_bits": 149, + "radix": 64, + "target_bits": 128, + "working_bits": 330959311 + }, + { + "binary_exact_working_bits": 544452103903, + "dirt_bits": 20, + "dirty_arrays": 11, + "inherited_4n2_working_bits": 2173513231729, + "leaves": 34688, + "prepared_target_bits": 149, + "radix": 256, + "target_bits": 128, + "working_bits": 289883099871 + } + ], + "rows_sha256": "5ad2e243f8f8af0cffaa97ada64b4cca6374d2339c7afad189fb3bdca50281fb" + } +} diff --git a/research/ternary-dirty-composition/LICENSE b/research/ternary-dirty-composition/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/ternary-dirty-composition/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/ternary-dirty-composition/NOTICE.md b/research/ternary-dirty-composition/NOTICE.md new file mode 100644 index 0000000000..cc0966a001 --- /dev/null +++ b/research/ternary-dirty-composition/NOTICE.md @@ -0,0 +1,47 @@ +# Attribution and license + +New refinement, implementation, verification and documentation: Dillon +Amburgey, with substantial OpenAI Codex assistance. Apache-2.0, as in the +repository and the included LICENSE. No independent human review, formal +multiplication proof, practical speedup, or literature-priority claim is made. + +- androolloyd, [PR673](https://github.com/CrocSwap/integer-mult-bounds/pull/673) + at `0e35f56cab3cae1eb0a99447135569d687c5695a`: the general multiway dirty + echo, its nonlinear restoration proof, inherited precision accounting, and + `O(n^log_k(4k-4))` call bound. Its exact `echo.py` and `ECHO-PROOF.md` are + retained in `vendor/pr673`, including the source's OpenAI Codex disclosure. + This package refines balanced size placement at fanout three and supplies an + independent free-term/noncommutative audit of the actual pinned generator. + The echo identity and exponent are predecessor results. This package does + not review PR673's separate phase-alias repair or κ appendix. +- Chafik Boukhalfa / chafreaky, PR628 at + `0768f97d06c623b8211e651543c66135796b62bf`: cyclic inverse leaves, rounded + integer lifts, balanced binary dirty commutator, preparation/precision + arguments, dense reference solvers, kernel fixtures and executable sources. + The original notice is preserved at `vendor/pr628/NOTICE.md`; its credits to + Ali Romman / PR621, the exact-DFT preprint, Alexey Kuznetsov, Pan, Mehlhorn, + Sagraloff, Wang, Brent and Briand-Davy remain in force. This package does not + reprove their analytic or algorithmic results. +- 0xkilgore, PR663 at `e0e546fd01b396478c68b6b6c5a16d87515983ba`: + independent nonlinear restoration audit and the exact binary count + `3qn-2q²`. The count provides the fair baseline here; the original `4n²` + allowance is also retained in the precision comparisons. The symbolic + verifier in this package is separately implemented; PR663 supplies the + predecessor audit, not proof of the refined instruction schedule. +- Jeremy Kothe, Chafik Boukhalfa and eumemic, #622/#623/#626 and #543, and the + preceding lineage credited in the selected review: the base repository's + accepted conditional finite construction. Their multiplier bound is neither + changed nor newly verified by this package. +- Borrowed-workspace cancellation and ladder methods have substantial prior + literature. A related quantum setting is Khattar and Gidney, + [Rise of conditionally clean ancillae for efficient quantum circuit + constructions, §4](https://arxiv.org/html/2407.17966v2#S4), laddered toggle + detection. That paper is cited as related work, not as the correctness proof + or source of the exact eight-call array word retained from PR673. No quantum + implementation is asserted. + +Concurrent PR665 investigates spectral residual splitting and PR666/PR668 +verify cyclic certificates/resultants. Those are distinct scopes; none is an +executable dependency of this contribution. Existing scoped negative results +for fixed incidence graphs, grouped frames, and commuting duplicate scalar +gates do not test this change to the product-of-shears composition tree. diff --git a/research/ternary-dirty-composition/README.md b/research/ternary-dirty-composition/README.md new file mode 100644 index 0000000000..cc58c0a9e3 --- /dev/null +++ b/research/ternary-dirty-composition/README.md @@ -0,0 +1,304 @@ +# Cheaper balanced ternary dirty echoes + +**Construction / recursive-interface research; no new multiplication κ.** +At fanout three, androolloyd's +[PR673](https://github.com/CrocSwap/integer-mult-bounds/pull/673) executes the +first and last child twice and the middle child four times. Its balanced split +puts remainder factors in the first blocks, sometimes making the middle child +longer. Placing extra factors at the **ends** reduces the complete recursive +leaf count: at 15 factors, **208 → 160 calls with the same 5 borrowed arrays**. +All forward, inverse and restoration calls are included. These are operation +counts, not measured runtime improvements. + +The contribution is a proof that this placement minimizes **uniform leaf-call +count among recursively balanced ternary splits**, an implementation, and an +independent symbolic audit of the actual pinned PR673 instruction generator. +The audit checks arbitrary nonlinear restoration and the ideal noncommutative +product. It also confirms that changing only PR673's partition hook produces +exactly the new word, for both signs, on the stated finite domain. + +PR673 already supplies the general multiway echo and its subquadratic call +bound. This refinement preserves its ternary exponent `α = log₃ 8` and scratch +bound; it improves counts at nonuniform splits. PR673's other fanouts offer +different call/workspace tradeoffs. No optimum over those choices, unbalanced +splits, or unequal leaf costs is asserted. The rounded leaves and inherited +precision assumptions come from Chafik Boukhalfa's +[PR628](https://github.com/CrocSwap/integer-mult-bounds/pull/628). + +## Reproduction and source boundary + +From the repository root, using Python 3.11+ and its standard library: + +```sh +python3 -B research/ternary-dirty-composition/verify.py +``` + +Expected final line: `PASS_TERNARY_DIRTY_COMPOSITION`. The checker authenticates +the vendored inputs, recomputes every certificate field, and compares the +complete result with [EXPECTED.json](EXPECTED.json). All new checks use explicit +exceptions and stay active under `python3 -I -O -B`. For a new output file, use +`--write /absolute/new/certificate.json`; an existing file is rejected. + +Base: `66849e1475c930fd7732b1a0067ffee7e1e95f60`. +PR628 dependency: `0768f97d06c623b8211e651543c66135796b62bf`. +PR673 dependency: `0e35f56cab3cae1eb0a99447135569d687c5695a`. +The retained files are byte-exact in [vendor/pr628](vendor/pr628) and +[vendor/pr673](vendor/pr673), with SHA-256 and original paths in +[SOURCES.json](SOURCES.json). PR663 at +`e0e546fd01b396478c68b6b6c5a16d87515983ba` is credited for the independent +binary audit and sharp count; it is not an executable dependency. No pending PR +must be merged to replay this package. The assignment, candidate selection, +overlap checks, and time limit are recorded in [CLAIM.json](CLAIM.json). + +At this base, the selected conditional value is +`51110230636731/31250000000000000 = 0.001635527380375392`, from #626/#543. +Its certificate is `research/community-k492-audit/pr626/replay/ASSEMBLY.json`, +SHA-256 `6127732e2fcdd470dab349c1c51d03cd9f0787ad0309b1b4a7c811a908028f4e`. +The associated `docs/research/community-k492-review.md` retains the all-size, +compiler, hosting, normalized-residual, precision, tape, and analytic assumptions. +This package changes none of those suppliers or the selected pointer. + +## Interface and eight-call identity + +Arrays are elements of an abelian group. A child call adds a deterministic +function of its source and the **initial deeper scratch** to its target, +preserves its source, restores every deeper scratch array, and has an increment +independent of its target. Its negative call is the exact inverse instruction +word. Read-only factors, phases, and coefficients stay fixed between calls. +All active source, target, and scratch arrays are distinct; no ancestor array +is reused as deeper scratch. Overlapping views and hidden mutable dependencies +are outside this contract. + +Let `A`, `B`, `C` be the three consecutive factor-block functions and `u,v` two +borrowed arrays. PR673's chronological eight-call sequence at fanout three is + +```text +u += A(x) +v += B(u) +y += C(v) +v -= B(u) +u -= A(x) +v += B(u) +y -= C(v) +v -= B(u) +``` + +Every call restores the same deeper scratch `t`. For initial `u₀,v₀`, write + +```text +a = A(x;t). +``` + +The first target update sees `v₀+B(u₀+a;t)`. Calls four and five restore +`v₀,u₀`; the second target update sees `v₀+B(u₀;t)`. The final call restores +`v₀` again. The target increment is + +```text +C(v₀+B(u₀+a;t);t) - C(v₀+B(u₀;t);t). +``` + +It does not depend on the initial target. This proves the recursive interface +by induction, even for nonlinear functions. The exact inverse reverses the +eight calls and reverses their signs, recursively. Negating signs without +reversing order is not valid in general. + +For ideal linear children, the two arguments differ by `BAx`, and the increment +is `CBAx`. Induction thus +gives `Fₙ₋₁ ... F₁ F₀ x` in the original factor-list order. Commutation is not +assumed. The ideal increment is independent of all dirt. The rounded increment +can depend on dirt: `A(x)=x, B(u)=u², C(v)=v, x=1` gives increments `1` and `3` +for `u₀=0` and `u₀=1`, although both scratch arrays are exactly restored. + +## Optimal placement within balanced ternary recursion + +There is no search or factor reordering. Seed 58 selects arity +`2 + (58 mod 3) = 3`. At `n>=3`, write `n=3q+r`, `0<=r<3`, and split the +original list into consecutive lengths + +```text +a = q + [r>=1], b = q, c = q + [r=2]. +``` + +The longer blocks go to the ends, which execute twice; the middle executes +four times. For a singleton there is one leaf and no scratch. For two factors, +the ordinary four-call binary commutator uses one scratch array. Exactly: + +```text +N(1)=1, N(2)=4; N(n)=2N(a)+4N(b)+2N(c) (n>=3) +S(1)=0, S(2)=1; S(n)=2+max(S(a),S(b),S(c)) (n>=3). +``` + +**Optimality in this class.** A balanced split has sizes `q` or `q+1`. The +displayed placement gives + +```text +N(3q) = 8N(q) +N(3q+1) = 6N(q) + 2N(q+1) +N(3q+2) = 4N(q) + 4N(q+1). +``` + +These values are strictly increasing. Indeed `N(2)-N(1)=3` and +`N(3)-N(2)=4`; for every `q>=1`, the next three successive differences are +`2Δ, 2Δ, 4Δ`, with `Δ=N(q+1)-N(q)>0` by strong induction. For any larger +child placed in the middle while a smaller one is at an end, exchanging their +sizes saves `2(N(q+1)-N(q))>0`. Optimizing each child recursively and applying +this exchange proves the minimum over all recursively balanced ternary size +placements. Blocks stay contiguous and factors keep their original order; +only the cut positions change. This argument uses uniform leaf-call costs. + +**Workspace.** No child, inverse, source restoration, or identity factor is +omitted. Children +reuse the same deeper pool **sequentially**, so peak storage takes a maximum, +not a sum. Every balanced placement has the same multiset of child sizes, so +the scratch recurrence is unchanged from PR673 at fanout three. For `n=3^d`, +`N(n)=8^d` and `S(n)=2d`. In general let +`h=ceil(log₃ n)`. Every child has length at most `ceil(n/3) <= 3^(h-1)`; +induction gives `N(n)<=8^h < 8 n^α` and `S(n)<=2h`, with the singleton handled +separately. Hence the all-`n` bounds are `O(n^α)` calls and `O(log n)` arrays. +The strict comparison `α<2` follows from `8<9`, not a numerical logarithm. + +For completeness, if `3^d <= n < 3^(d+1)`, the exact scratch count is `2d` +when `n=3^d`, `2d+1` when `3^d= p+1+ceil(log₂(N(n) a (D+1))) + (N(n)-1)ceil(log₂ G), +``` + +in addition to the two leaf precision conditions. Execution then consumes at +most half the `2^-p` error budget. PR628's independent factor/phase preparation +must still supply the other half, scaled by the original source magnitude: +use its preparation target `p+1+ceil(log₂(max(1,||x||)))`. Dirt enters the +execution bound but not the ideal operator perturbation. This is conditional +on the inherited leaf and preparation estimates, not a new audit of them. + +All cost components remain visible: + +| Resource | Charge / condition | +|---|---| +| Completed leaves | Exactly `N(n)`, including every inverse leaf | +| Mutable array space | Source, target, and `S(n)` arbitrary length-`L` arrays; `O(L(S(n)+2)w)` bits, with transient integer magnitude included in word size | +| Leaf traversal | Three computational passes (`3L` loop visits) per leaf, plus its coefficient-stability and grid-validation scans; `O(L)` arithmetic work per call | +| Source and phase access | Every causal update, closure-product update, target update, and undo is paid. The leaf uses `(5L-2)` phase reads for an outer factor and `(6L-2)` for an inner factor. Multiply by each factor's actual occurrence count. The test fixture separately checks its `L` unit phases; a concrete public phase-taking wrapper must admit immutable, nonaliasing phases and charge that scan | +| Helpers / restoration | Two outer borrowed arrays at each ternary level; deeper pools reused only after exact restoration. No zero-initialized length-`L` helper is required | +| Control | Streamed word, `O(log n)` live control frames / `O(log² n)` indexing bits, plus `O(n)` read-only factor descriptors; no expanded instruction list in `compose` | +| Arithmetic | PR628's charged clean scalar arithmetic and counters; no reversible-bit implementation supplied | +| Coefficient and phase preparation | The same certified approximations, enclosures, original-input scaling, and charged oracle/table access as PR628 | +| Normalization / frame changes | The radix scalar is included in one leaf's multiplier and its error bound. No additional frame conversion appears in this array-level construction; conversion to a physical supplier remains an obligation | +| Routing | Neighboring cyclic layout in either direction. PR628's arbitrary-stride two-sort cost remains additional; no free route or owner allocation is assumed | + +Under PR628's `log₂(beta^-1)=O(r³)`, `n=r-1`, these bounds give +`w=O(p+log(D+1)+r^(3+α))` and `O(r^α)` leaf passes. Interior causal/closure +magnitudes add only `O(log(beta^-1)+log r)` bits per leaf beyond the completed +array bound. With the **same conditional fast-arithmetic and preparation +interfaces**, the resulting work bound is + +```text +soft-O((L r^α + r³) (p + log(D+1) + r^(3+α))) +``` + +plus charged phase-oracle and routing costs. The exact-rational prototype is +not an implementation or benchmark of that fast bit bound. A fixed number of +dirty data arrays, common-label realization, fixed-tape scheduling, complete +transform composition, analytic transfer, and integer multiplication are still +outside the result. No currently binding supplier/assembly constraint changes, +so none of these local savings imply a new complex exponent or κ. + +## Evidence and stopping rule + +The refined schedule is tested with free nonlinear function terms and +independent noncommutative linear expressions for every `n=1,...,64`, plus +`81,128,243`. The pinned PR673 generator is independently checked with both +engines for `n=1,...,64` and `81,127,128,243,255`. On that same 69-case domain, +replacing only its partition function in memory emits exactly the refined +forward and inverse words, with the same scratch count. Vendored source bytes +remain unchanged. This audits PR673's fanout-three word and resource functions; +its other fanouts, phase-alias repair, and κ appendix are outside this audit. + +The checker also minimizes over all 23,328 balanced size placements arising +for `n=3,...,10000`, using independent dynamic programming. It agrees with the +refined recurrence in all 10,000 sizes, finds strict savings over the original +ternary placement at 9,919 sizes, and checks the closed scratch formula. +The written induction supplies the all-`n` proof; this finite replay is not a +formal proof of the full multiplication theorem. + +Rounded tests use the unchanged PR628 leaf with mixed inside/outside factors, +both cycle directions, nonzero targets, arbitrary dirty arrays, a spectator, +independent dense inverse solves, and exact whole-word inversion. Additional +cases use PR628's authenticated factor certificates at radices 4, 9, and 16 +and independently expand the complete kernel polynomial. They certify the +execution error against the represented factors; the separately inherited +coefficient perturbation remains part of the full kernel accuracy contract. + +Controls remove or flip each of the 64 leaves of the `n=9` word, reverse factor +order, alias the two ternary scratch roles, misuse inverse ordering, violate +the public array interface, and demonstrate nonlinear dependence on dirt. +There are 141 rejecting controls, plus the concrete nonlinear dirt example. +The complete finite domains, case digests, and results are in EXPECTED.json. +The integer budget domain is all prime-power `r` in `[3,256]`, targets +`{1,128,1048576}`, and initial-magnitude bit bounds `{0,20,1024}`. There is no +search exhaustion or general impossibility claim. Work stops after this fixed +refinement, its stated coverage, and independent review; other arities, +unbalanced splits, unequal leaf costs, and supplier integration are not +investigated here. + +## Credit and license + +Prepared by **Dillon Amburgey**, with substantial **OpenAI Codex** assistance. +[NOTICE.md](NOTICE.md) preserves predecessor and related-work attribution. +All new files use Apache-2.0; the original PR628 notice and PR673 source credit +are retained verbatim. The echo construction and its exponent are credited to +PR673. This contribution is the balanced ternary placement minimum, its +scratch-preserving savings, and independent symbolic and rounded evidence. diff --git a/research/ternary-dirty-composition/SOURCES.json b/research/ternary-dirty-composition/SOURCES.json new file mode 100644 index 0000000000..ea7707893d --- /dev/null +++ b/research/ternary-dirty-composition/SOURCES.json @@ -0,0 +1,81 @@ +{ + "base_commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "repository": "https://github.com/CrocSwap/integer-mult-bounds", + "pr628_commit": "0768f97d06c623b8211e651543c66135796b62bf", + "pr663_credit_commit": "e0e546fd01b396478c68b6b6c5a16d87515983ba", + "sources": [ + { + "path": "vendor/pr628/dirty.py", + "source_path": "research/prime-power-cyclic-scan/dirty.py", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "09e7f41141594e6540828330d27be27c083ee6569660ae42c0cd519b09fc8d21" + }, + { + "path": "vendor/pr628/weighted.py", + "source_path": "research/prime-power-cyclic-scan/weighted.py", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "8b0f93d131a30e64eb0ccd893779daffea79c0c00f1d2a30a91d23eb2bf0bff5" + }, + { + "path": "vendor/pr628/check.py", + "source_path": "research/prime-power-cyclic-scan/check.py", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "a3e46b556894d71a1c83bbbac01c50c1a541285fc9422a3567d5eb1d1ee86e7d" + }, + { + "path": "vendor/pr628/scan.py", + "source_path": "research/prime-power-cyclic-scan/scan.py", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "1a9c01ca1a29a9be1e756858161202621db29d5d332a4266b4017a9502a50d7e" + }, + { + "path": "vendor/pr628/interval_kernel.py", + "source_path": "research/prime-power-cyclic-scan/interval_kernel.py", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "9b7bb24640a9a7d3f83c7951dfef483ec933db4c50de6c0130b85f450eeddfbe" + }, + { + "path": "vendor/pr628/check_budgets.py", + "source_path": "research/prime-power-cyclic-scan/check_budgets.py", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "581ba58a30e05cb09dadb35be6e25bd92232b2137a0cc7eb5b83e2ee20c0bf02" + }, + { + "path": "vendor/pr628/dirty_budgets.py", + "source_path": "research/prime-power-cyclic-scan/dirty_budgets.py", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "107d7e80b9b752625e7e817f1226c364f872be1facc5fd24c2e74dfdcd4714ce" + }, + { + "path": "vendor/pr628/DIRTY-PROOF.md", + "source_path": "research/prime-power-cyclic-scan/DIRTY-PROOF.md", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "bb7c2fdc1c4673d56531fd56fb8790c81a16813ac152c10f1afabc9efdd70d61" + }, + { + "path": "vendor/pr628/NOTICE.md", + "source_path": "research/prime-power-cyclic-scan/NOTICE.md", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "abeacf1ad1491d5797cfcf1f3832799bbf3b24b99597229d7bc884059a51ec68" + }, + { + "path": "vendor/pr628/FACTORS.json", + "source_path": "research/prime-power-cyclic-scan/FACTORS.json", + "commit": "0768f97d06c623b8211e651543c66135796b62bf", + "sha256": "643d60ac24d5e67f6c9305175bd1c99bf5e42edfef6d1995c051e0b98ba446a7" + }, + { + "path": "vendor/pr673/echo.py", + "source_path": "research/cyclic-dirty-commutator-audit/echo.py", + "commit": "0e35f56cab3cae1eb0a99447135569d687c5695a", + "sha256": "63d44c48801f51720a7cc994d6b5e2e857d1aa4fae4c6b83c0cca032b3d9e13b" + }, + { + "path": "vendor/pr673/ECHO-PROOF.md", + "source_path": "research/cyclic-dirty-commutator-audit/ECHO-PROOF.md", + "commit": "0e35f56cab3cae1eb0a99447135569d687c5695a", + "sha256": "e98e459720d8013618853bb4836558cf8bb06a4a1be03fe0954a76f178ecf403" + } + ], + "pr673_commit": "0e35f56cab3cae1eb0a99447135569d687c5695a" +} diff --git a/research/ternary-dirty-composition/ternary.py b/research/ternary-dirty-composition/ternary.py new file mode 100644 index 0000000000..a8c2eb5775 --- /dev/null +++ b/research/ternary-dirty-composition/ternary.py @@ -0,0 +1,101 @@ +"""A streaming three-block composition of source-restoring additive shears. + +The leaf callback must add a deterministic function of its source to its target, +restore its source, and implement its exact inverse when sign is -1. Its +increment must not depend on the target. Coefficients and read-only data must +stay fixed throughout a call. See README.md for the proof and charged scope. +""" + +from functools import lru_cache + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def split(n): + """Contiguous block sizes; extra factors go to the less-repeated ends.""" + need(type(n) is int and n >= 3, "ternary split requires at least three factors") + q, remainder = divmod(n, 3) + return q + (remainder > 0), q, q + (remainder > 1) + + +def resources(n): + """Return (executed leaf calls, simultaneously borrowed arrays).""" + need(type(n) is int and n >= 1, "positive integer factor count") + + @lru_cache(maxsize=None) + def count(size): + if size == 1: + return 1, 0 + if size == 2: + return 4, 1 + a, b, c = (count(k) for k in split(size)) + return 2 * a[0] + 4 * b[0] + 2 * c[0], 2 + max(a[1], b[1], c[1]) + + return count(n) + + +def word(n, sign=1): + """Yield (factor_index, source_array, target_array, sign) in execution order. + + Array 0 is the source, array 1 the target, and arrays 2 onward are borrowed. + Only O(log n) control frames are live; the expanded word is never stored. + Negative calls reverse the instruction order as well as the signs. + """ + need(type(n) is int and n >= 1, "positive integer factor count") + need(type(sign) is int and sign in (-1, 1), "sign must be +1 or -1") + + def emit(lo, hi, source, target, depth, direction): + size = hi - lo + if size == 1: + yield lo, source, target, direction + return + u = 2 + depth + if size == 2: + operations = [ + (lo, lo + 1, source, u, 1), + (lo + 1, hi, u, target, 1), + (lo, lo + 1, source, u, -1), + (lo + 1, hi, u, target, -1), + ] + child_depth = depth + 1 + else: + a, b, _ = split(size) + v = u + 1 + # PR673's echo at fanout 3, with longer blocks at the ends. + # Chronological order: A B C B^-1 A^-1 B C^-1 B^-1. + A = (lo, lo + a, source, u) + B = (lo + a, lo + a + b, u, v) + C = (lo + a + b, hi, v, target) + operations = [ + (*A, 1), (*B, 1), (*C, 1), (*B, -1), + (*A, -1), (*B, 1), (*C, -1), (*B, -1), + ] + child_depth = depth + 2 + if direction == -1: + operations = [(*op[:-1], -op[-1]) for op in reversed(operations)] + for left, right, src, dst, child_sign in operations: + yield from emit(left, right, src, dst, child_depth, child_sign) + + yield from emit(0, n, 0, 1, 0, sign) + + +def compose(source, target, factors, scratch, leaf, sign=1): + """Run the word using leaf(source, target, factor, sign). + + Scratch arrays are caller-supplied arbitrary data, not initialized copies. + Extra supplied arrays are admitted but untouched. Array aliasing is rejected + before the first leaf. Overlapping views and hidden mutable dependencies + are outside this contract; the reference uses ordinary lists of scalars. + """ + n = len(factors) + _, required = resources(n) + need(type(sign) is int and sign in (-1, 1), "sign must be +1 or -1") + need(len(scratch) >= required, "insufficient distinct dirty arrays") + arrays = [source, target, *scratch] + need(len({id(a) for a in arrays}) == len(arrays), "source, target and scratch must be distinct") + need(len(source) > 0 and all(len(a) == len(source) for a in arrays), "equal positive array lengths") + for factor, src, dst, direction in word(n, sign): + leaf(arrays[src], arrays[dst], factors[factor], direction) diff --git a/research/ternary-dirty-composition/vendor/pr628/DIRTY-PROOF.md b/research/ternary-dirty-composition/vendor/pr628/DIRTY-PROOF.md new file mode 100644 index 0000000000..caf4aafc78 --- /dev/null +++ b/research/ternary-dirty-composition/vendor/pr628/DIRTY-PROOF.md @@ -0,0 +1,128 @@ +# Cyclic inverse shears with dirty array restoration + +This extends the classical rounded cyclic-inverse primitive of PR628. It removes +its need for a clean length-L intermediate array. It does not supply a common-label +Clifford realization, reversible bit arithmetic, transform layout, or the complete +integer-multiplication reduction. No new kappa follows from this lemma. + +## Contract + +Input x, target y and h borrowed arrays are complex dyadic grids of spacing u=2^-w. +Every array has length L>=1 and may initially contain arbitrary data. The arrays +are distinct. Their initial infinity norms are at most D. Read-only phases tau_i +have modulus one. Phase generation/storage and coefficient preparation are paid; +there is no free phase table. The primitive adds an approximation to Q(W)^-1 x +to y, restores x and every borrowed array exactly, and needs only a constant number +of clean scalar arithmetic registers besides loop counters and factor descriptors. +Here (Wx)_i=tau_i*x_(i-d), initially for d=+/-1 in a cyclic layout, and +Q(z)=r^-1 product_(j=1)^n(z-rho_j), n=r-1, with stable reciprocal/inner factors +of norm at most 1-beta. The final increment can depend on the initial dirt within +the stated approximation error. Exact independence of the increment from dirt is +not claimed for rounded arithmetic. + +## One factor + +First consider T x = y defined by y_i=x_i+b_i*y_(i-d), |b_i|<=1-beta. +Choose the cyclic order in direction d. Let z be the zero-boundary causal solution +and p_i the product of b from the first position through i. Let c be the complete +product. Then y_i=z_i+p_i*s, s=z_last/(1-c). The stable cyclic equation itself +implies ||y||<=B/beta when ||x||<=B, so |s|<=B/beta. + +On the dyadic grid, perform the causal pass directly in x, skipping the first +position: x_i += round(b_i*x_previous). These are integer lifts. Reversing their +order and subtracting the same rounded source products restores x exactly, +including arbitrary nonzero initial values. During the first pass also accumulate +the rounded scalar product c_hat. Compute s_hat=round(z_hat_last/(1-c_hat)). +In a second pass accumulate rounded prefix products p_hat_i and add +round(m_i*(z_hat_i+round(p_hat_i*s_hat))) to the appropriate target position. +Finally undo the causal lifts. Each target position is written exactly once; +its existing value never enters the computed increment. Scalar arithmetic and +coefficient scratch can be cleared classically; no reversible arithmetic gate +claim is made. Three passes suffice, excluding validation scans and paid +coefficient access. O(1) clean scalar words and O(log L) indexing bits suffice. + +Nearest complex rounding has norm error at most u. Assuming u<=beta^2/2, +|z_hat-z|<=u/beta, |p_hat-p|<=u/beta, |c_hat-c|<=u/beta, and +|1-c_hat|>=beta/2. Using s=z_last/(1-c), rather than separately bounding the +numerator and denominator, gives + + |s_hat-s| <= u + (2/beta)*(u/beta + (B/beta)*(u/beta)) + <= 5*(B+1)*u/beta^3. + +Also |p_hat|<=1+u/beta<=3/2. Hence the corrected output before m multiplication +has error at most 12*(B+1)*u/beta^3. If |m_i|<=r, the final rounded multiplication +has error at most a*(B+1)*u, a=13*(r+1)/beta^3. None of these constants depends +on L. + +For an outer root, b_i=rho^-1*tau_i, m_i=-rho^-1. For an inner root, scan in +direction -d with b_i=rho*conjugate(tau_(i+d)); the value at position i is +multiplied by conjugate(tau_i) and added at i-d. This is +(W-rho I)^-1=(I-rho W^-1)^-1 W^-1. The scalar r is included in one leaf's +multiplier. Each exact factor has operator norm at most K=r/beta. No permutation +of the mutable source array is required for the inner factor. + +## Product of factors + +For exact linear maps A,B and a dirty scratch array z, the sequence + + z += B*x; y += A*z; z -= B*x; y -= A*z + +adds AB*x to y and restores z. Split the factor list in halves recursively; +use one distinct borrowed array per recursion depth. A negative call executes +the exact inverse instruction word (reverse operation order and invert signs). +It is not obtained by negating signs in the original order. + +The rounded construction still restores every borrowed array and x exactly. +Inductively each call preserves its input and all deeper scratch, and its increment +is independent of its target. The paired calls computing B therefore see the same +input and deeper initial dirt. Never use an ancestor input or target as deeper +scratch: the ancestor target may have changed between the paired calls. This is +an explicit alias exclusion in the executable contract. + +There are h=ceil(log2 n) borrowed arrays and at most N=4*n^2 leaf calls. Pad to the +next power of two for this count if desired (identity leaves require no rounded +inverse). The implementation splits without padding and checks the actual count. + +For the ideal elementary shears, the joint max norm grows by at most C=1+K per +leaf. With a*u<=1 the computed trajectory satisfies + + M_j+1 <= G^j*(D+1), G=C+1. + +Comparing the complete rounded word with the ideal word on the same initial +arrays, and summing the propagated leaf errors, gives + + E_N <= N*a*(D+1)*u*G^(N-1). + +The ideal word cancels all borrowed initial data exactly. This proves the target +error bound for every length and every initial dirt bounded by D, while actual +restoration is exact without an error allowance. Choosing + + w >= p+1+ceil(log2(N*a*(D+1)))+(N-1)*ceil(log2 G) + +and enforcing a*u<=1 and u<=beta^2/2 gives execution error <=2^(-p-1). +PR628's coefficient/phase perturbation bound, budgeted to <=2^(-p-1) for the +original x, then gives total <=2^-p. That perturbation bound scales with ||x||; +for general input bound X use p+ceil(log2(max(1,X))) in its preparation budget. +The initial borrowed dirt does not enter the ideal operator perturbation bound. + +PR628 has log2(beta^-1)=O(r^3). Therefore these deliberately loose budgets need +w=O(p+log(D+1)+r^5) bits, and O(r^2) passes. Inside a leaf, the causal state and closure scalars add at most another +O(log(beta^-1)+log r) magnitude bits. Maximum transient magnitudes thus add +O(log(D+1)+r^5) integer bits, already covered by this word-size bound. Standard +fast fixed-precision arithmetic yields soft-O((L*r^2+r^3)*(p+log(D+1)+r^5)) +bit work plus charged phase-oracle and routing costs. Factor preparation and +coefficient enclosures are inherited from PR628. Borrowed storage is +O(L log r) words; clean arithmetic storage is O(w+log L) bits up to the chosen +multiplication implementation's workspace, plus O(r) read-only factor descriptors. +A machine with only a fixed number of dirty data arrays is not covered by this +contract. Arbitrary stride still incurs PR628's explicitly charged routing. + +## Executable evidence + +`dirty.py` uses exact rational arithmetic and explicit nearest dyadic rounding. +It checks generic variable-coefficient leaves, dense independently assembled +factor inverses, both orientations, nonzero targets, several initial dirty arrays, +exact source/scratch restoration, exact whole-word inversion, and the leaf count. +Finite checks support the implementation; the inequalities above are the all-L +argument. The exact-rational prototype does not itself implement the claimed +fast fixed-precision arithmetic cost. diff --git a/research/ternary-dirty-composition/vendor/pr628/FACTORS.json b/research/ternary-dirty-composition/vendor/pr628/FACTORS.json new file mode 100644 index 0000000000..d3894bd2a1 --- /dev/null +++ b/research/ternary-dirty-composition/vendor/pr628/FACTORS.json @@ -0,0 +1,402 @@ +[ + { + "radix": 3, + "embedding": 1, + "roots": [ + [ + "-49530798732358771146118901080958076273052470912342260266258914227109710325121387637640669783171544976658235453737966492290535102314016775076196131137253281608605845416954368911072190053165368500463077348683479820730223655747230034954087192637416985282711781569366341015472238222901103154593890125768068166111/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "13475305001181955152635744113343228941870362999235845156852762789867665164197346764233250937361286208084929252607275859697194884125876348244811537318304219573113812813781235059890295167053180994008138010725194287959555680271101985158640265590661977057048524039192974778963502923615772560082862029626247356915/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576" + ], + [ + "-170592372764629843867157976456437557496591605016661465377627293282379593058008669423781376417268214078363699912331157051907114448593591383586878883684704623349440149303389490092308949295538404178253469730760549011796778712019234252302695280536406885179602202888146765328976392461917368148065254242900199873601/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-46411209039859540974176647362240554857493432165837745376222291831822369430116719300153189465225800706342648078500395279868781491155333745970178758722507111433403998868313736485156740909917748907461424289090884948593897673112150836753179290605396652366677201787911857343898640266500768045571317618646184981515/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ] + ], + "beta": "1/32", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 4, + "embedding": 1, + "roots": [ + [ + "18839227606306460928750436776825014273496077882053237212856774153163841259423959845929808348046828320902424357370784726029073309579224150022196016795678227966011136545266483378669974662335269472502528125472018535885295396863622929964034462260120294171947340433492325221872688727385544533583048885326400903597/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "12796926340379968523293584046788682991068081520875261248350397459182248423294625032260126325308015563095435234200881380927938236702421262255195096551267084999719624023209458696352316971284756123109784206671973205284974765619111294724890379061690528176512207203087118838657451331182211930074180553022205037717/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576" + ], + [ + "-67937135992698413485848028692002309503217002121030373236286063853851112002834956545147982981350737462809662177353146777437281023159349478379475061510263643694108201092716816673971478633600166383954345966000686009575573734331558302198133439150275018280298091260360209316562436177361876091474717502741308380027/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "5835616822424528393018276731807351617575339522981934688817604363901147520344005371600541622764811103253229296878826668528234697818556822582094397306602957922127281544555831623274134108430066605792876461395490781682749981003075479237572505884700169238753265724966398880489058963937223602091905317904711941499/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "73140002878255602241711158912281750377574232707837598458857400104507930946414903201953646254948585509216110472170409026061261014243757141002856798605902222432653774400735298040913720270819301943861772786445719733578848858120147397354586183800152541785894513923362213804429810043582243527480464796014608479295/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-101965650555502300179425242688687701922297090080040644000576714490063310164897746283818166254598757360914998703650200531654685086831846027226086641171539829015447750993610037727758956893880614628095284026104635045032186714065136378505612299766669091235639722208461448795105675773286000398597466612399588126671/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ] + ], + "beta": "1/32", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 5, + "embedding": 1, + "roots": [ + [ + "18410399432434593285169076294769602275894540638275295419244544381879773242101229303192661033873560946309710294140171891893900372823577853227464636318197065166893737578492060390055766605671671799743745029504200984650324085253453636489088551766233790345264477955593735634726155875498225455897152145422527110857/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "88926944313291886897540182389959275756316664511795052113045934836868436387626350644157761509746590523735127289561482706452011713192888368531757723983026280383546034048812998372260884484021077768824721106874944498264700931287184901932524740060871613024772296891180592599727648764929046216006068462246504374811/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-167545453603640477774873977068820521490816283320967799058419418306745166535530698475752796883467944874062781699503482002031721106189111733803133269028126037337336557647540282023493990675410251006273872459992624200925878916492155324954465535073616098706096481035319289799489810569175272312690818408702357774707/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "154556349957963769064367096421348364953192572923709918873780464142362058554060160862470338328380796109257170485631887393041866922712420579126848130118663444268007905141768967672162702816973919207497792878550271826416467017062585388767141690359055369161984340591026398951036705551282299373389928249065466957777/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-246025941110189748337782398645962696281966535596390989644134716992878047915802819087254020031137007742552596547220618828803263741659091725736455982888598484589330876923271022291321628747736395867996706991862080909718783945688678933156172363230796038024619721716767295126085355526352538295019215908632644428645/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-80017827675325207808535539612151904575968566998857213977754346138586638701168117409273474539675100516306047838318004762335480802433891996015633286597935493715465198565408881501720917279311214162172063959383782684101469915657487668687514739767345963311117394934914437584673901163128059865890829000565376585079/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "215712256432223249791838888842272962081449782057642246390000600800148072180501294511436300947360881829332748816482640829932179778301978229874156851415522923858548828681148808544326153700577210577826268148302190110772732181100719565734873230271520263077404047413202169567004576671193383551882477838906429979943/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-343345360254883912964398674422494284929201599795775129858953529504351638375339699421889616865554200011416676596545392950323715795619267003477668104686330984199520110843844773329958643601792506764296355657817381043552933491542452533905205092594361844214785757345776857492089057313413558295951124845050277505639/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ] + ], + "beta": "1/64", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 7, + "embedding": 1, + "roots": [ + [ + "120836177722361423700961200616746340939117621826067821546283999942075497210076949759460370715678904626969473270870038244427213482017330996532718477962097048482765518680096123147561488619800104812093083654163138766755667970537231472653449243809561047362543545086368385980168510507433365046715788937161703716085/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "68125532188584294286663341974472312621216872199921619246009406654878430278942492383247031997235044995684216361049673718348715972217344544049530857813500428243332162775155119877092074201530144921889140264057120091137424453307505120185335081880162914431352955991832950471916200413514695655590549673800742347681/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-23352251484866588814984102757151938020295470378892869474143458720257279649755690100107547794252764950418419952156812046731260229125257633674879904341802608588717478148648944135150233501962993159400202815681865439334171539946279604850805926161998688918951893236128852170350420117380648887992523528703050194783/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "12132115037519896013585104434007386698287966150528447173769745653094849377705471451533571302407701987585405260939215552836593163546110098278844478687559077536413118639791236269008047600329470759689721901333721666143586701098282693338033702985076136987291514686849805451278368411427725280317893977203863584583/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576" + ], + [ + "-92291382711014775221380021171202817794657125260699000287682436525116249639100986456003288102293593362503506340776371812568234629218022304094954295338321708547490187028615230917002633870289187269289797994714342072570440381702763361962356356505306507682202967183538465154964375441642931008189553934230981931559/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "119712689918657651145189233762925546457090337327810229148877839636675818166345698397220337691661044465436596246450977563970023691296540621113539611731979073364553791157261962787179002477238112224575127636003783615332436194461854998451162028079761177278027679849503098212639903585808693056859631675024978403655/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-241550214101542094297167535638151897507830585201411331736006717246868123702109366984690181768784545848116906421886000314994526788327659530751761942604584557795696877540130891932133377552105984741145270626005788962709578395270874088233819746015884483414705471639012552028950063730900626438412769308246134412423/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-44636521770478560155358654717184927568066750073373513015128082461673476496822166780757639936727928123676721979818426533919863914831246651250724819329685161786373417321779253128206274251444083819402120012005681947845516990805594334226921578412078056649090375828519802643691118444466847932595531100425230751867/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-30203061381136258809439665112684149466527548721381460346906377733218206927673101886508360525270680857362678859262610296498976901610754244593890353821856268232116927740493603349537265139809747876075016798077935946460243881062966294672661437770702005876180419387161259974619074523496342984580783717368906963491/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-305110068800135848497848181573777483300901124284310624770759696080464881064477659631992063113691884421747360163819890589058455217115247182223505704124808283746309249249359889226760626023333388774388559141421503453637601946482828567415910388069454422041311561341290600832629150554612317238895704865818852456303/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "321370196207928824720915204711075455015246912340098126751032311594524033112453537345445629309422537818066392684089031234715114932786141935425039670921672922753033036803089443416637226862726853593951312786044577899391357952048006221305816041423551248138900234992740786667031784280806046850529260976098348049203/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-24530473927531504467392407392323938052443883461832126187972943992643983667419063708657378422819680820353364287646948211385092126125885316040368239976682069981937416789728921378575979136146542456286295719081463657034678512460199743093437741946258402070242087927157968777687527815825283515074190769218475070497/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ] + ], + "beta": "1/512", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 8, + "embedding": 1, + "roots": [ + [ + "8676521756510435418408946804461767324891306204862417174847745121263025946650658922911780062841899310292089809846830833767424385518217195893825119278967539421517248349379935548836275419185719990536047729374806106190931483190985689626709113976582272252929209174868395094303365494483709135736692733466731317795/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "46927175506395187795687931561127127492542914401987186784106756230323458946080644106593751363160127877209084537223858819579870206674713563202937305209536930043680869885123270522345465099010053820092378973496193748874813123926250211050432217802376301722910925291572156201602782436939032617502745379314433603689/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "66202580992830939447277596770820976547224187818360015042315917699790056190563629777404288554237323292216596605503553003282188641500233854198283302909676455062335042428271478810798541736972692302397024682764300702362971680590029381246736867638520196791172922404288387541122616211813091943463685403402194819637/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "121765996413538109244722158430733772946581021648295379494316178425975201830123378250127037871022862140665047768946333869871635524590445958253367982270652171353818448747755198251644533171986927552011666923832137891571028711514868831622149886611924577771659219065857057020727239216653669500246218019089692681775/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-63004972185514719302016938882476801018029290150894658797428428794872008178224844068489106570343956469890320581237050176572657244106576400241496924996645905145525690133237596136064437406720491787085549650786601720713499367232077045311041089715211178346785441054922158278590254819899949862505839484404422514173/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "162089912107789904580698670024539381013319877304490279642065801647607770297007606234339566380838505368774389327096714260667996331814249381137709093996072587356720324791880511287815302447216666542808264118488552050522502999610415668210833042811542567219354932850746955158614010677677778588862432609198364889609/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-114541150781975074659493858700499576773418741657487570824179357865241951223155018561684267907712799100922762526706741412523928902105409038951683693424204620570355075936652546398681787931145609090635335092259268023627437543404884939870413071359280803563668076790897925194743799223677433801998275248938099138653/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "28536383328959703993730430075303364190020911254551649423945663982045094704274492977093462377686393175454598424578736919668575596341930388955047068633656361481992620692814813327812876623975978375572536423322145652113828759035405388077251778997084312380853597717028602612494470837499099867849196700594746333193/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-201517388249894989478411032097072751718656423446768498708508564928448662660651229648295542554051448907899318156973678948290345776073447986354173204606393763408869392055271224486081374851034619526102418795206963640221560398265963426462213308991975932816594775660953319668579841424702426262528857537080463794965/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-174513042277315163849266924439208792551210027773319873062117112212107791949617487997311514602133978721591638988373550045126013490861600577744660221983293741489328994487990284644844821816190752936317045684025385986252691736431523152528005392504331486525860129092504396317973074372934850065698391093382548690683/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "20853952201633312877387277508463847055126394746254519899742972932555894208910866792849243688527659586695779456772099102381103863965624564255350878448532450809472846089800434934408081189773222964612807975923115727341248896300480297539550915338524351483735093086771402116129065052573895987568833471894650866121/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-312641081391502269606656250395689464714521237121044730843195101985540858918629890694914712449559446202158312842962672451031785756934401273144496289056535368585556084621907933962326641902682587075123817870096547428328478755021925309233810847720403976729205559662801376490464233034499544774061638742784145893525/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "166672131806845776192896885973661042124973372869940345006468266318743480528703466414015865739675637832291806442497067063319157094307655919219743641987468037062277740025664176448810213542701871758655081692776525610517996057224630655703118199190067622390022656134231632552577778502578893106037108271941930607565/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-4376967838200489497250994948825473623872235696381225795629850903139948925947408138790254476399212615558494266176816561458243901205759824715627651584088611054101239737165343081922176424447484738906847833188948761892037696110205922052863065492314158621446222809067390965832669530284377833079714832042153910245/5617791046444737211654078721215702292556178059194708039794690036179146118921905097897139916325235500660003558745981042426837180275450519452901482207483566386805246669527046414884444362538940441232908842252656430276192208823201965046059784704400851161354703458893321819998351435577491134526104885300757004288" + ] + ], + "beta": "1/8192", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 9, + "embedding": 1, + "roots": [ + [ + "333910482659483459438655528550746003905249000982454975806894848438737707753764976869561366054330641369183833856032301628669487010009234742939505872476695122089942073608783197493524773122513229557328670182714416409970596568787760524274687406159411184511162472265702547672362929076759614595740589264277517789373/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-47752137171466876261593994891268639759720371836251849522631883826242730835462895269072450253303956251409642499713362915697132486294075863280378249136595798406260146271799670133428231669418934780402000503782168565275986637683350570973550359499708480182227099344116449794282936783930506661431843381346792007145/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "180857061429154340683796569249229633634282740219290917942321763794161703285567755908320831766805092839199995120635992701965884419377793868614453316178802274842846369150241658175248894374357637462187419868434067659967756992677108864166432671147587357826434832424046949718532074646758771501650950393504125313/702223880805592151456759840151962786569522257399338504974336254522393264865238137237142489540654437582500444843247630303354647534431314931612685275935445798350655833690880801860555545317367555154113605281582053784524026102900245630757473088050106395169337932361665227499793929447186391815763110662594625536", + "89031252177887495190665762976190738719635134333314194291508015840329805457255816648024444476560108063934040996807695532427466053700897943316995019084184510458211965571902286576252834532496294909472140013944090159918770767649059087712467909540838463240479671623720707864757601071992191516521915069518033316617/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-77570549831923552874388989142731030044682007042905840083400846000380141528891579777851595702752702328774473303959132662315889278783543232097424451580806347987068043391866782113060657867967927073555566291117612044119958405987268589066112630178066419315079209294063775976558795584459682150886660045413954013769/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "179897435173147029214413437523250288359207247872041518170502120727641382930349650875642891171666569302908673314657961466832174273548337212606432197485311335192890539535613453859826823968059826198019685012450454506061510186429992789952527736462387221084655053453668251388987921959301870000019796834301705370287/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-190010959094347690462269137172070133553459071158786598796602362999138607180514755593009011514443911574926856975116553278070950196565545016104446202259984121956425990468540175254088981798543541253103375431235218242689895049528330746625788021572824829150972581783014458284949616718799691063891716331606263765491/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "99030770506346274571412767249597026710488468973300656614141769044065104917082032751052659130642873032747152401206156730746432904390655127956658220469005080826426402974997601139897941906522466353259384287497934337081931282143875656631456401729850661272991846764776573277336890519241664182121666563815825108741/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-233081207055107292068614793986538528139321828237103534257403268711362307316433680696116996201453280211587720811602707281081949546040375748910078559633641468576989928431965548210945788819468022114946692214502141994372721141673746177085180557226353646152761400166555794272666489885938550232614191513505184437909/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-55943527093538648994131853774327760706423292404958516460832453352530715831038895988364294084379075527404154738093222713072803156085772412806543739693673201174982311509658713101771928709767111169834072902328747368130517026338521314072319621096339894710376582330134409800137590938355592424671582274968784888015/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-73674816051867153651072739874884099639564752966078427342019842615755828513593612394516445502429253037266855084255963456491511864584968452239949356574902784890872662314770973795626380106098390700582613148829779523841278267045301960823172752044249996830463280555136131109752238430106594324223891786255349386507/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-229807430732849177117110644126555193643659835289545136715286801956254443227030503648670842696618870987609340139528277927495657195520865722750609252335913869508408276603724155327353030563572875987772902902949206596449124196495306939290344827467222870442728695524546121120411264232478377181674795998646854090937/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "21321939274995178538221961206791871382984274797017580984543305003879576871583449027897925288200755917559935688963418115740792809342472296149539253956569356996997885510566587640382490543578910073936695660519193238722044786613345993169911490333550849222184308269478701581148338439803843307487853418615205531513/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "-150737439183938417466026541943664853780573301677390200716773762546802420416786746939455291356847900573293657693272612561521417054798588970409780434875913176859075028648525952666660665297532915477471545641607412073362848129142966744244476665807658602486321803579387819475245914693110974696229125922432406831735/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "35114167688248708489705226725520322239757602458420567049561448419515293002391419875052402245031950661384666638645168035176238701372703027255979313802828205032500024750897988872631333460681293263507451895457087663973744113306278768660451880594853026913028478026418649968409550880245338037923086078312777680791/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "27546478297781289342951459913655862154150871859653605939980547557514582388613385010841997426553751173842745619847075795184069081850799605852120546322776304239444231584968459156764651674979961647993059971657017151034383284332304041936961882154160895082836934427447719866692376787959364467530446014008721598863/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ] + ], + "beta": "1/1024", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 9, + "embedding": 2, + "roots": [ + [ + "36627579605007658966659778461203634251371697379108157264801251842963340495317878340007270952160418991100126967216105106719737629728806468143838917422932843178173126209184087556635317452073232467886327807084905993395510516160589404741476340166934455525421308327705599519861799297110888754524674156034983913189/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "91213904696706307172757488630720409637634441273504301106383789102894171902182804905443189017899008504696948838212829861096814223539148482614848676923111790231266756795679293509188920363735763072749479237417340538439822705330283204140328446148978965322292213168306231351893475906153300657761895447665575697199/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "84035680545684351602473661021561463081168863906638834415994052385965625479101474846868259017791131826318727391437910192088726625481437554020823348149067175314300228396308280676735847981399985641700401470915484644497581666130585473688371033657369860576189725447930344844832440162634723948823836250202417994515/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "8148013099263468190653788738472861941241579884501632117571698363380494060372231299699288233780855988276576215383902261263316045847213105572379987687627519561818982137927974561918890474195006623065707914273566644830852081228319342987631236139162161704438123829472498354324469835175859687317768243701014103519/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576" + ], + [ + "-100078953961497513827019582958503948692313436745489773412119737617020533859319405373115780371895107700252180090915260674831636736234959936041881253145088199481284819872914984423224863245178613426667354296068721645475017118632587754300463918861969486842414948740548757053004934043822785610986714760398365599679/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "3398809930139403861148899090261015484845408816967426658162601582201664636905280230206674173374829015640972007851858863447180055375534479268107072312487849563160091306886763149122921123989532906823269948436995082554330272656634564774170850622113683532802699002449190529818559937755553698477368426140195610501/2808895523222368605827039360607851146278089029597354019897345018089573059460952548948569958162617750330001779372990521213418590137725259726450741103741783193402623334763523207442222181269470220616454421126328215138096104411600982523029892352200425580677351729446660909999175717788745567263052442650378502144" + ], + [ + "-183338193122679443380740560128812455004059475231783258422114826847995734608876245819348478430541727370982727757486771145154226239259518782402684145929956021883455556122678489997638290182053381073341880321623966722662080562479192139016173619844654784754986657599090969957280567175733144107276191731039944767793/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "69544043884892615520046310400849713710736128335193355114162837516266036707296210585162307101033581669414559740283356404136662487557992456157952373635087040782218145130401822170858673477542223017483990259128019803079762888726928377309670948765232529247230492706760919274284002471550667971352710783976141811759/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-286271387236816925280241522879228420963755468856311152978521691079419985629370744590058055558139090150368540678259547716089060942385350516235204508672078069739575899105386310373908278914441421362759756269445058265422389064137253935790453915270461746334070802354549224387950778330302172659661620800950476186749/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-82918958338806825753830833680976263062074588869905593699233198939242160296448906481827055827641905389023514571488788279137339639543608846689251136263565750412573086750041060060195606898601160434500732786154396471493243930049913562346718453598705146259982726005531537274756750753151714066487137785910761431947/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-49807632985904636056327801309165668569949679703177249904015612774568110724009981257491882061879367530463687202275856313301341867893146717453038446249068471976860842053788497157502426856271448101222353866671376525212460060433231010076669364400926876741344107657680474212816727791674300296404422336397687738749/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-177362022940644076757392587993194089526114195004881930778497281946886928035272836044916000656700084837927346549061559295412976727004631522383668857538236746314783697433474028860696915143971089197553031019918950340000537004506529613569767212474004309695951498140271896557248889203205304701749822638973665710421/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "151726435005196152503621229407512430240201194430624150994328999718615893705101127231153874291153282523199899481986566943279721987880106907314573029521495326835809641098557389722103622116104726637641894632029695112812573695921454951502415653852282073265566820064948245713045069992446951560447509654860385758977/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-384822354883360534431812042911405387725218348666290124845083009057711843252196160570381320302098793490714437674025650657316209395944001060980319931861297115592823638687839794408498221389027544281560445374349368840423996714188312856799321242909238654232390908052313482832343212428064897303568712693638467285975/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "41081431198079572611558466625440658048255168639522243169055624589826066923314664776521434977008446938486253681718692790654307094043265416041383699295454020975360572161215700150415363540172271447445087225207715238810462166560904016969936740545340760747113041037652787910341644753600676564529962945902837220001/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "-4118711747111065465143117971635801376758138406433752164082253287354658505291179385338879623132445718177109921503638931942611426340975801223027948444391682221345950298080184044770827371312364405460096337648485815254515555637274146065727250436766509743948076237782619108756462233723207660043495600271274827343/5617791046444737211654078721215702292556178059194708039794690036179146118921905097897139916325235500660003558745981042426837180275450519452901482207483566386805246669527046414884444362538940441232908842252656430276192208823201965046059784704400851161354703458893321819998351435577491134526104885300757004288" + ] + ], + "beta": "1/128", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 11, + "embedding": 1, + "roots": [ + [ + "19987067627228188344629069299179400482723624880399215433823291767545287429199097189201872739530866475858846834340571882225835111913315556842511345498467666815253246841468908666504463346483028254245326381190693095283853100267355904488055841487849491381199845949444150700195520393828374821557134768600767466237/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576", + "-16371177452751777825563018362473384628992592467063145384041920070193938502884230358731455517486303546488422975735506625293320144959392098974784869852824091878513232785682339953450977565251051966045793101131935501779170807314388776610230256291440229867741336996952861254445223349520745729923222550176564288491/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "18856846747548568697588208088342677025973301317628666942362894682533954455666322781604686688583386331954228030929273184779113235417601784513933283718249884792714800236464676089878514996628927413059992636963593921322785923317037817194703770654332326501994334024022987493666601426630817081203976984338145763405/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152", + "92987134558769461110036206867296860043881621638534166853641725913226172224366088756826381486275497978147294133585381794639930001435905110892538226145300666954747499650465654558096450639522609112222032585019033582960779504653453557208357386268301504380446208517791958035784800586179182112037390042935466531117/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-8755627176049049991226664047137245698863739906064153437347452970558147035098726451283760392997679178295614102787623006912674241102405755920868082634752574119386112664741472162925566921061850884242496676415467646079844403140934545444691802820099406918031463518136566579394224020189874248767924449767942783925/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "184869178819451977603611176386928738242876901648101569688171783567941034492292441694469196166591126057251772941746470171157037212752090292935695497021766339398687078438294125034073412980357691297887600434603353395394298477189459158524716423700412207205879422399971470449045719677938588065634394716581191836817/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-54478583300645253822831870111416997505140953588934025523583341251965664154365796078024298205741864555549713807076133144301802106929744713687687990384993502959532496048549753489310281500438525352868503316582822328826656480517864695496618221362284012857411443021555596782792697074220181225526863918268300639411/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "20286205262628437605254043475721537150966571526564811549532640552204714056754728803364947802459551692869353686447919641018139868478560640763273306515452613049046891837083267506195031814938252858003236870013002284111289860505997396859958206617069856782707127987927582577818632717973254483287992421656734652759/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ], + [ + "-95898183509014184241500254592800463383859036505354131097291586846162888704186664657955359052988941231121132518651068021267889402827792190056019212109768207300155797496969688201128119018149578616452527735438289364195597833846776297049494445152908588057194749724385825905412784224692093180207921450384112242461/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "42778814428655042090098870059327487099864258445354926673871694836725119840952203199861360259612720795076463940032853087688047118369165810858094712277252996243488507752097503657331562950399220905133886815882248888535031166708361760343306732503522179656046809130881476963896662304795263022774723587080694995587/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-225921504279610020642388278131970798218208536978767361355204927337288732255627291982651523854880824990070444198973400989148467743303745890374317986738214990201636073279077380395278347044974050305694703888747355737926977743906487115905900433985192373300492134362778507994126188996113276482333293522946874166163/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-18512006630388580492498585919316792146843256940712140321718354870283077911759945301636725256521424427374811915420777847665766697831971631267719642616122994338671795328699256187096082707061323572720759145517912510241431847044219321767359552211168619158510793131072148281713269420146872738380344999839805482673/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-180384503040408332969274788910647993002194348933408627006352614755504198801432827860872973900664892565262188160970148757056307523990146812970216425530483920281444046886004414828488834832305952363622670602928505922661923912562146105294903808098488454307366830380059864074416998974794846587590490652864169574297/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-176646969751708359448147936704547232946199217170499539675033536510376224673878639512761397186205834591084970427821916955369563206972314869103885725048066220048023304706002429705664922747797907812155061260294680552052160516977538525542207321666484952876348281560646346378263539923187144743564731897674171100239/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-38861837212388384976420529976991509417115833041275628837436068047549600060280382176786322036369939502791851622004559175908329336385610877310085063200757697917251570206071466998822689139170709736990644246151849501271239337143095479406182219416332143451639476774213058321348321744184322700650862375330310963823/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-277565260286031004677878130054188583191705289863934684844268782639173497999273973903587616669187872134632967542328894598608374892255412381085758974558621898023147837402060395658900058771526410416451986547731710938161234642213649079303903522523174051553608817790842230009020182395206171132818408527279761433361/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "21488211622826500960553162925976956012202845211007392491489641798267308432671711630040098232679466316650764179735598419427366676486749904192558644332299235921421144714023516384651586190355271133895433014816047193327744219762731373547159612179053454955452144677625900088969121688703953521421817439565637653255/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152", + "-128511894661549286531404877158872813325425204854650114042374504318410629316789283103583139449251533177702910299315398368686906037165442415057629373076402635077289348627984153358667785498500978795932314288919594386024513282286275663286707605543358820950021120445081138909212973329449308021598533550888061275955/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "83585712907819930372525737678387002726043373066088394654745598301106562580077687197093984735045193590830082209556833412016347775904780083057550263000319559749883171904511683435215084292917686994094634613938974636571702338378693688527807890580242888639214849494751714712417179164070115873698326690655414974855/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "39527043648482950010229499119972439999724135181397298119791477377378696955872414923351111484626654042810194997537223158576386497412597956774521165982556008744194574609655834444282255397016231889321227196472166056329130778270908426382465705876154201534793629442915901015100724328325125021229484333621969864103/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ] + ], + "beta": "1/1024", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 13, + "embedding": 1, + "roots": [ + [ + "18692326237161478268382893815511145026088685648190526628486457135249558896952920917514467617130261745382206732573150104474804362843637309165023312885970700945843085407379411136466208630482730176116475442280579227987505293153616103902239142645063037996256214288997875546400775697052054140996875722199535144377/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576", + "6486859248533430000780273205701654512173970909417755732036832012643583151844496919483104176207017793400666110165169957902541959012070998111285223760348081928328199544477282093388192150307015875863662558373792923793254558604148460967249276341192795957495960108311024542088237938103987924150576546911604521261/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "157323348664187956666822829330189664661635426810358914253796127992247865612061106690649235990527526045899298682970108967127473022845446753514004123946631683036181536536551113663594714055940804627834938973774495105472785669307840365432825878956659739101252967010629991460289857031165177301889783427611928177035/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "40452681226070075570072472344401074944712003983589808887925600577667159697646220867905051803615621855045591166578947446549771630680539405755136473452812017494827925564012739248547906421181216869880258586492201563801160785331284811700400735399327336162196251093715630564873576011674857714278044254516933544179/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "34899392812722428966123339680611544816703491872217428378010116691058846226498126253227436478273425414652638211700583485046158136663268894227982165278243907434398134769506468269248093633129553630375056939180388351514797408409815225914896580843925098996214002147635347069013543757886234918338529369491958625833/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "88011579740709610420551536777095471880520733731329804909182057295159138856658844441946791253952523971367978325361906101288855444899057938251340285018035035161867960959529967697490808156919827046584265520088861647898766523277648589169329276572810161414081405603460615665641982272371797657744614418548585824559/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-23632344362636047103245294315793142313888805211632242345277872394180256512662942947584023084035033218243173110811282908595282258284332226870800162079433188907613058231842037992245668397834548268318570993706111537983389312729510092584842380438077530588177371098312347383358971591168761951695032633273140864129/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "179549417839364571074172991064461500088264697781045040638237379539937742850790852186678832881823049512825498163936194969819369072795634141188946475578546985346143228307209114122988494462198458310511930360221307110264021454197646686772971727200632632260525068224424641531327341793787119527322865955849707710265/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-64171504828073803152954152937711567711542666684035601356646712378688470076580612870475769092135067000533842853688036144897397023533079657883641351971704778429165978068814538057468601770310658772323207554597087096804145799486637998411913965567996425496787598923735682562388421874636442133233905377559485353157/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "73251115769149306473345828646266294966486765451643471177403942814435204983959223865491318323457407052192740413543012493039306909122000661827522200300183854470520931139463523567192277441532807875169028627798601616463280909274217382738236473252288608372738895951142823317852525506369814133883275719630758807137/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-96104599738951769633676493389601285253005282559510584694569816846333257502863917660923538247139087495252208921646849092614916922614604316843162321832456288793741483649147875280476706456286703917113215728033231503625203893643516836727765185675495923663427569333306934484123850806643288701454825729811953604323/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "9516631030430603547304258413179041787814767345466107116984577378638068226215235344637777767447480019230821635109605408066669055840851972438579815757178810228708736258218847736218387748283693992362423328654952423382366630325601232318115927373324378897688359132242894713899973429384583590542101150580140274839/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ], + [ + "-55062228354540215497376005863565840475664320925484203015301893653352734911931366500499734179862501376983233255651835114951841126300871292416409994938947913247339808265695383764522624850188675657931604747407328681915351414694957246542297547449812418192888195444651234827845753423977115916824720713929628153581/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "-12496569895905601754496446211252110954226257293968968523070001442676531897713204634587293165700868423273240811744498014947415054071256992206134858336956107724864774886993506222731936628197452918495709094251331874681454069575341628004137867852588704373449128871488326320348282721855230926986775081427488534319/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-97236621922926488171753094952475321839966850867104708437058094218576032195216305246450562921641655245078955900922369570464505990156267416121818652856643194067118861143473065056879134133679172250527578434553971705148706518072819842042031704168804575722945478691295867602666460085505768296696878111825723393123/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-139974366379725222238941562299015165007954582856054307766040303104694071987798318784342412584103837521837750166553176969910384907399840762917340723142586181202439284159762153726030716323608885065258852362112003980666178559063919724073261539914546317386542228981943211320210328234291676368809663605528890583427/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-12916153817227395308964320333307521693172637922378933961237847141531974139138197199274579477201858620610500507563920459598428400153777012639967564196276145126945301605944903521853118392469464413956941118844472993633600262566258024731392397410303362620852019080248276163503519613363724636522615542062596291175/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152", + "-238994272365838385358698151204558291126185120423482408759980968611149377358699437412307564621248256757262516810026759206258728546995344843798934973819120821031754741483239472065190876326354096946934497360840975069467809446930323282385605750700824263085431792466905140472727845592124191127039452483105619360915/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "6013043937133886929785992231257511969627667249481246735439580322562221982328578577554836403334984733439034934735034117774148354364364987263562214790340175882986670622045334794157783337444852881404655139096629253059946504379613666594193738691315078072319789952637941430021364779329441507323583528933381210005/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152", + "-278679923529189704360039255534940158059487346553817563199472560610069982490137529352759281333079523373930862003820159709004193000121849875645389874369158065539387537232566451095140876980715405549825629533527920059018461562814145916859044343901996440993708624557401126980979858868823094800991662382134844602877/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "109989007535808651476018626898092526943022773744744817418914845584436965704556653332778848051969834606627072091810750458326495050646220897112757542708660487042684367750689381549049479775617896373974012758542109149431726669145658671611746929890662655791701705849605871346529807065359253700271713756945440448383/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-51882011778821188484364240793453110774348786484062001914177257798483135937985388930919631365603190565770832669699636056548063889192925119116887789197614808884804148831874399739412809224443826013793004508047851389354227654919416055982643722487389332768423157423587133671627261738239235292352438537394793285609/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "105894466188666824637797522379481298816044382741836996193011641682857452110816736028928950018833122381771371198703803457128745525851017334778410249826879397875759195534689495859965994904874626346162905042038177007336006951294064455526202243127641508935278616124494878183999313811884724475030368145374684989523/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "70513352389598145213663477133635023707890899921823566159207226270576916995395924683079445594271942693838367850660040457845959093720558038483352469338574636265642119180155548293660979873985809604194360555360145016038237726142654627699688283243073137486408739406691752226458425337231524766414622661143826464579/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ] + ], + "beta": "1/4096", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 16, + "embedding": 1, + "roots": [ + [ + "134039650432496433101295605159145494804947147618859989214825957778126813783946265379824234530653079795983300535220081531974499830210731306488624875267801121995052729438299927149721093666927526785655754801147235486784301827065913383198135946696241002975265831017168785200446019385215181318777012203053206775435/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "10043776175087489111857420427705466089122018604250422834704851221257606484042652956267827527042103582138401817998484317090147751084140645935922861891946502301969712627060390112286498548692413675638854082746767615556998261778873625372575511704320589333963130560858950109780981665146820923938000446283595843981/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "163698198267763187271175317732354162942142798991132287897605537834861074139898973926663170112137318749861087075458509497866923709014367775583409379820255381037822285641799332965596998682187512678394888610812074850883841645394925104103931217581714852536893012837648469034763538149987146660169793180318525683963/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "34154907814115855601778002615718880203068084565931904547779687937911408288344869439590995495717368706638636414617448243280929199776252293685154663952500722290615662112290390816093868694604275838431637064859423302174318393837094657848778434379080583038727143019868879816065247203874832557642095346180510541817/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "125972697409629971610668644095806954773026269483836139794069300342348858033512225247311677027781101220433900638850299785029618718841248714192496025858197851778421685409754264599923508300047622246726630559684778235132368096407527643305232066166954976575730325609055979040383084148029612053926198944646591312277/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "15167790659874947924589060300057100404989113576637779018845337397852208471948163165837442910874732484685189549202575299032263922362242746686661085009319025178790114153139930066286476936454793858408781296809315075998603335912470151363640101092646280120351957483245267415973808462131927199015047640649421685169/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ], + [ + "13853536865015261579911150032049872304272006558508656999350196565098776518334784731805531655741656799427586114638867558728051351302042284720128353136488689847220369858233808059733505486343038607449224336533854935610047845464572670709769013819513710914519750342782309697087053886069773135656466958608061541769/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "177545851147179895490196191648273709559870852473948635168982933050035672511543664292889660396400875012049726711091359491491643948309945736293014186853449971590825791166882789030071391843162221062181697202769315484013800917514554939433749527198631298084673567294376435632058165815416832640235572073617726120941/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-52210378056113995222526794456200026551550434350267615704607002484161409961625123864247636241912256583356359184500954597575895892110205892926433892520877857803012652172002684435938465544783335544671181399418477865628149454975798200306362483024809010252305140774988065045567446320437361416053738363358747644443/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "87648308710707093471187039917458706451472578491021738770540393300719242093206053400276097328660396266053722682800563211432811793974391639650142917556304518681178604701687327846402527191048522814812999729648713916842250073122954579935163661634587626288322854319550536493507991774193503157659239580292987842157/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-116664073824034912718051835779935450320038013857443941308097484208019490686854521720422334021093095268154662714097019061138743852755115144088228123078315232346900394049166264273018455963049040513237001187564736700035245183063339192035351382225907798789582613795974065118752512750692942562782534375193614661861/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "149449269678260753521945326074791968079519019469792743136375292271466248404832296872514640066703937306939051683043529915596390678603913779661604066173180108039752595884583226240160259044735240089986116711339120429442816430176353855415258845446067522565220002881930958366647672375789662340506634532555558066251/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-85610957404387028634243322426648242688663257839375635069698465559559419377521551982033761821736612609921595358004172251326835155119996617686944093557730406618580170261786725657706867217353963671009491290423195732204000640025294244393939752267572032643929785491689258684316664163295188812404572449637311320451/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "99615833663101054301816080147826293655285718447019552564330413357835145945778960092597289825973787281964918942430276502793281215764935713502351704443126657759517272838966727793208748184206115834330960302736430555573552466912693730743584134891685941797179902285300308856534717258649051539716231977831990434935/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-206470925126790414958903095327931072696188278347167769164325237872418927430185815104414777620540205015448274164195641352218542457975169039791010753378777708716944076446597350330115681723054142766603880278838717720575430103778172708862328494065918713903827091679242299103863352097855468435963485647011288487845/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "28326730094049526360308020645864856724598891128838513609367588904514833835204347361667185978800994436970191543152173345365891935121884286237303162650500563575271973969509154285033455092089962932786873166080400502570268738193931444116625301385853996639117280974700258567439169279262226550039720244993440086577/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-212793201622109962448330100692808593439645159644577548679667883054110536914612983822159045347472254754395342771708966598767283083523909873556284381276124835470115664134649247694090104295004718385271153849431718533152316853933967919972046963990390480364949318130626453951329110678301062337081449200475601735875/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-57964249005932469131896837719919287256295100537523457777437606447238450243954529094264672294496860934864424519386491456408615251057823684209861120741434670159618673936343232127524840096572869938406481577342691505214852241781904532730223280532007263456890157126325151281429988053858853115810915974956182248013/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-181906514405143036384357434995971625275836390798303598349017616251000415282024441569357952686816616444878672327665448828051994214624348737805868406889846662816154885625310561267277397135353478192043756460106331313083421328902239020972755544322708347048855909898995764083966273823919667161396109476550719848725/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-147945663340461763698212430143771286414026284146309945071685010721085537380641268203814890803383015075422455405339014135542776026293391412163500686456905034790428849048670266153134094858649998069511486106390629359568273414843847740088984032890568291491121209596476991217967574780912075401622245788540973317237/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-109295650712632922954470152700014140962344687784228817505917409852933900860213282982253187319663670767937851495649957296830456277490544817826798947725684889752695688092754004821393186285277520453649669774004548684876352062161227459330029625465970767406457202300678613241928430071212855440266575276167464763807/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-56200741848002868079111868432724886507129621548125121648642474266599250489673841691778046881437449293933434722648357280706913445930283045991236908716738562916199191451345481529063774448710946467551285759609323141571550416355308596877200595274065373565280076263027603986562578831336689401091825392816459762247/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "15968822176892792285891476438139425317687583108455281192008770761103687215213981897594608046751009662616135817210933151016991807601573680585709456982599855455736137633949541869722566316681492518193528500018722529515726386747292338115274696063766393314538517893691137581991598848479112650484943606294759671/1404447761611184302913519680303925573139044514798677009948672509044786529730476274474284979081308875165000889686495260606709295068862629863225370551870891596701311667381761603721111090634735110308227210563164107569048052205800491261514946176100212790338675864723330454999587858894372783631526221325189251072", + "-266324790638046954468748086815326096854011998014910958879637384810491281671701735342579622902906841022217262017537242815542832447116697353634706329017518582629343845840130883918382746688279956080610789278337184153491906948023245930590272626869013417164765399270940382908317755754807962553226947387458433481969/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "1060865642031292630770255648031651464303955219241748845301061404301449150107131123877033982501236564870546734157170738071205142825981730629211934466958373310795930234883644313113012070731987912222503770737372313560840648279391481374684780737322726034313967342539259478356716096981485614792922808816297076935/1404447761611184302913519680303925573139044514798677009948672509044786529730476274474284979081308875165000889686495260606709295068862629863225370551870891596701311667381761603721111090634735110308227210563164107569048052205800491261514946176100212790338675864723330454999587858894372783631526221325189251072", + "-246799233700152837800565619104070457222176842192478672102595825359550055541867252492449227477274629665694532828700249246838030620913792598556947021011742874894999694125075108903854687975235844168506798118891370394456073402356817011957930168970746212902758217822556747842079095849448037149783703853881509351465/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "74864797941206513281047175374406371423373655545874336711328481273747977974984455616940936075339467433634151221026156653070150698647294564580345247390350645817572015177013890581338145235391049860293804890641833349803840457797326162410138640935908664989180260619163393823243511563841284652103776498758852275761/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "158507016237416030279508951176317259509379692049347194102510424353036380843727700204504205980624447511489013333078714007658126019484831026660454241743943509290714726174111157436372813963025263036212831092360360315950519574485871493725846468575071813444421951074798721371147434849601216160281721594412331444679/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "126287595802823388378145790573347116516250877023657551588569070335106577368621778092749228800089231992059072999369812292461321688715048725080489109408634374024142218044000898630952519239661477382516567361587110636505950019813691734756152201601098996057298499115007197346303456331071237494888612444968034206643/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-143526397691224128056251209454968080411106577138808675995376721394908697117978740021220231248704896684803444156609685788793425078524968774144075750535259582404256698559171991950020896681595928832179228331976729295065837037698098662420392076528307364731612360503267270299597486337931330781272500922478650324859/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ] + ], + "beta": "1/512", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + } +] diff --git a/research/ternary-dirty-composition/vendor/pr628/NOTICE.md b/research/ternary-dirty-composition/vendor/pr628/NOTICE.md new file mode 100644 index 0000000000..22fbeb8ef0 --- /dev/null +++ b/research/ternary-dirty-composition/vendor/pr628/NOTICE.md @@ -0,0 +1,24 @@ +# Attribution and scope + +Ali Romman's PR621, exact head 520774462b19b29af41554b74def31f9d01e997e, +supplies the prime-power kernel circle bound. Its kernel attribution is +OpenAI's exact-DFT preprint at adc7f1241b42e322a6451854ab7e4b4c146bf78a +(`loc:newton`, `loc:fourier-factorization`) and classical q-Pochhammer/Newton +factorization, including Alexey Kuznetsov's cited q-calculus work. This +package does not claim to originate those constructions. + +Pan's approximate-factorization theorem is used in the form stated by +Mehlhorn, Sagraloff and Wang; Brent's work supplies fast elementary-function +evaluation. Causal/anticausal recursive filtering is standard, as illustrated +by the Briand-Davy source listed in SOURCE.json. Sources are cited for these +specific tools, not as proofs of this package's complete claim. + +The scan rounding analysis, explicit budget composition, interval and +factor certificates, routed reference execution, and packaging were +prepared with substantial OpenAI Codex assistance for chafreaky. The dense +matrix solver and algebraic coefficient crosschecks provide independent +computational paths, not human peer review or formal Lean verification. + +No new multiplication exponent, literature priority, maintainer acceptance, +physical tape execution, or production performance result is claimed. +The code and documents use the repository's Apache-2.0 license. diff --git a/research/ternary-dirty-composition/vendor/pr628/check.py b/research/ternary-dirty-composition/vendor/pr628/check.py new file mode 100644 index 0000000000..5ef6dd67b6 --- /dev/null +++ b/research/ternary-dirty-composition/vendor/pr628/check.py @@ -0,0 +1,178 @@ +"""Rational proof of mixed inside/outside cyclic factor inversion.""" +from pathlib import Path +from fractions import Fraction as F +import argparse,importlib.util,json,math,sys +sys.set_int_max_str_digits(100000) +P=Path(__file__).resolve().parent +def module(name): + s=importlib.util.spec_from_file_location(name,P/(name+'.py'));m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +c=module('scan');ik=module('interval_kernel') + +def prime_power(r): + if type(r)!=int or r<3:return False + p=next((d for d in range(2,math.isqrt(r)+1) if r%d==0),r) + while r%p==0:r//=p + return r==1 + +def certify(data): + r,k=data['radix'],data['embedding'] + c.need(prime_power(r) and type(k)==int and 00 and type(target)==int and target>0,'precision budget') + c.need(type(fb)==int and 0=F(1,2),'gauge chart') + parameters=[im/(1+re) for im in v[1] for re in v[0]] + mid=(min(parameters)+max(parameters))/2 + t=c.rounded((mid,F(0)),1024)[0] + sigma=c.mul(center,((1-t*t)/(1+t*t),2*t/(1+t*t))) + c.need(c.norm2(sigma)==1,'exact rational unit phase') + error=sum(max(abs(endpoint-coordinate) for endpoint in iv) for iv,coordinate in zip(box,sigma)) + c.need(error0) + for name in ('unit_root','missing_root','wrong_embedding','low_precision','bad_margin'): + row=json.loads(json.dumps(mixed)) + if name=='unit_root':row['roots'][0]=['1','0'] + if name=='missing_root':row['roots'].pop() + if name=='wrong_embedding':row['embedding']=row['radix'] + if name=='low_precision':row['working_bits']=8 + if name=='bad_margin':row['beta']='1' + try:certify(row) + except ValueError as error:controls.append(dict(name=name,rejected=str(error))) + else:raise ValueError('bad control accepted '+name) + state=certify(mixed);x=[c.ONE,c.ZERO,(F(1,2),F(1,4))] + bad=apply(x,state,1,omit_inner_shift=True) + try:residual_check(x,bad,state,1) + except ValueError as error:controls.append(dict(name='omitted_inner_shift',rejected=str(error))) + else:raise ValueError('inner-shift mutation accepted') + try:apply(x,state,1,(F(1),F(1))) + except ValueError as error:controls.append(dict(name='nonunit_gauge',rejected=str(error))) + else:raise ValueError('nonunit gauge accepted') + args.out.write_text(json.dumps(dict(status='passed',kernel_crosschecks=crosschecks,irrational_gauge=gauge_record,certificates=certificates,cases=cases,controls=controls),indent=2)+'\n') + print(json.dumps(dict(status='passed',certificates=len(certificates),cases=len(cases),dense_cases=sum(row['dense_comparison'] for row in cases),controls=len(controls)))) + +if __name__=='__main__':main() diff --git a/research/ternary-dirty-composition/vendor/pr628/check_budgets.py b/research/ternary-dirty-composition/vendor/pr628/check_budgets.py new file mode 100644 index 0000000000..ff21b6e190 --- /dev/null +++ b/research/ternary-dirty-composition/vendor/pr628/check_budgets.py @@ -0,0 +1,59 @@ +"""Exact integer checks of the explicit uniform precision budgets.""" +from pathlib import Path +import argparse,json,math + +def need(ok,msg): + if not ok:raise ValueError(msg) +def ceil_log2(n): + need(type(n)==int and n>0,'positive integer log argument') + return (n-1).bit_length() +def prime_power_data(r): + need(type(r)==int and r>=3,'radix') + prime=next((d for d in range(2,math.isqrt(r)+1) if r%d==0),r) + q=r + while q%prime==0:q//=prime + need(q==1,'prime power') + return r-r//prime +def budgets(r,p): + D=prime_power_data(r);need(type(p)==int and p>=1,'target bits') + n=r-1;ell=ceil_log2(r);d=1+2*ell+r*n*D;g=d+ell+2*r+2;a=ell+n*g + e=max(d+1,a+1,p+2*a+3);b=max(n*ell,e+r+3) + w=max(2*g+ceil_log2(14*n),p+(n+2)*g+ceil_log2(28*n*(r+1))) + return dict(radix=r,target_bits=p,n=n,D=D,ell=ell,d=d,g=g,a=a,e=e,b=b,w=w) +def check(x): + r,p,n,D,ell,d,g,a,e,b,w=(x[k] for k in ('radix','target_bits','n','D','ell','d','g','a','e','b','w')) + need(D==prime_power_data(r) and n==r-1 and ell==ceil_log2(r),'kernel parameters') + need(d>=1+2*ell+r*(n*D-1),'delta bound exponent') + need(g>=d+ell+2*r and g>=2,'root gap exponent') + need(a>=ell+n*g,'inverse prefix bound') + need(e>=d+1 and e>=a+1 and e>=p+2*a+3,'factor perturbation budget') + need(b>=n*ell and b>=e+r+3,'approximate factorization precision') + need(w-2*g>=ceil_log2(14*n),'rounded recurrence growth budget') + gap=w-p-(n+2)*g-1 + need(gap>=0 and 14*n*(r+1)<=1<0,'distinct equally sized arrays') + c.need(d in(-1,1)and sign in(-1,1),'orientation and sign') + c.need(0=(beta/2)**2,'closure denominator') + seed=c.rounded(c.div(x[previous],denominator),bits) + power=c.ONE + for i in ordered(n,d): + power=c.rounded(c.mul(coefficient(i),power),bits) + value=c.add(x[i],c.rounded(c.mul(power,seed),bits)) + value=c.rounded(c.mul(multiplier(i),value),bits) + j=destination(i);y[j]=c.add(y[j],scaled(value,sign)) + # The scalar seed and coefficient scratch may be cleared by ordinary classical + # arithmetic. The dirty data itself is restored by exact inverse integer lifts. + first=0 if d==1 else n-1 + for i in ordered(n,-d): + if i!=first:x[i]=c.sub(x[i],c.rounded(c.mul(coefficient(i),x[i-d]),bits)) + if stats is not None:stats['leaves']+=1;stats['scalar_steps']+=3*n + +def leaf(x,y,factor,phases,beta,bits,d,sign,stats): + inside,b,scale=factor;n=len(x) + if inside: + lift(x,y,lambda i:c.mul(b,conj(phases[(i+d)%n])),beta,bits,-d,sign, + lambda i:(i-d)%n,lambda i:scaled(conj(phases[i]),scale),stats) + else: + lift(x,y,lambda i:c.mul(b,phases[i]),beta,bits,d,sign, + multiplier=lambda i:scaled(c.neg(b),scale),stats=stats) + +def compose(x,y,factors,scratch,phases,beta,bits,d,sign=1,stats=None): + """Balanced commutator; negative call is the exact inverse instruction word.""" + c.need(sign in(-1,1)and d in(-1,1),'orientation and sign') + c.need(factors and len(scratch)>=(len(factors)-1).bit_length(),'dirty depth') + arrays=[x,y]+scratch;c.need(len({id(v)for v in arrays})==len(arrays),'all ancestor arrays distinct') + c.need(len(x)>0 and all(len(v)==len(x)for v in arrays)and len(phases)==len(x),'array lengths') + c.need(all(c.norm2(t)==1 for t in phases),'unit phases') + if len(factors)==1:return leaf(x,y,factors[0],phases,beta,bits,d,sign,stats) + mid=len(factors)//2;B,A=factors[:mid],factors[mid:];z=scratch[0];rest=scratch[1:] + operations=[(x,z,B,1),(z,y,A,1),(x,z,B,-1),(z,y,A,-1)] + if sign==-1:operations=[(src,dst,fs,-sgn)for src,dst,fs,sgn in reversed(operations)] + for src,dst,fs,sgn in operations:compose(src,dst,fs,rest,phases,beta,bits,d,sgn,stats) + +def exact_operator(x,factors,phases,d): + # Dense rational oracle constructed independently from the lifting recurrence. + n=len(x);out=x[:] + for inside,b,scale in factors: + a=[[c.ZERO for _ in range(n)]for _ in range(n)] + if inside: + for i in range(n):a[i][i]=c.neg(b);a[i][(i-d)%n]=c.add(a[i][(i-d)%n],phases[i]) + else: + rho=c.div(c.ONE,b) + for i in range(n):a[i][i]=c.neg(rho);a[i][(i-d)%n]=c.add(a[i][(i-d)%n],phases[i]) + out=[scaled(z,scale)for z in w.solve(a,out)] + return out + +def certificate(n,beta,r,D,bits): + N=4*n*n;a=13*(r+1)/beta**3;G=2+F(r)/beta;u=F(1,1<=0,'initial magnitude bits') + base=b.budgets(r,p+1+d);g=base['g'];n=r-1;N=4*n*n + A=3*g+b.ceil_log2(13*(r+1));G=g+b.ceil_log2(r+2) + w=max(A,2*g+1,p+1+b.ceil_log2(N)+A+d+1+(N-1)*G) + return dict(radix=r,target_bits=p,initial_magnitude_bits=d,n=n,leaf_bound=N,dirty_arrays=(n-1).bit_length(),gap_bits=g,local_error_bits=A,growth_bits=G,working_bits=w,coefficient_target_bits=p+1+d) + +def check(x): + r,p,d=(x[k]for k in('radix','target_bits','initial_magnitude_bits'));base=b.budgets(r,p+1+d);b.check(base);g=base['g'];n=r-1;N=4*n*n;A=x['local_error_bits'];G=x['growth_bits'];w=x['working_bits'] + b.need(x['n']==n and x['leaf_bound']==N and x['dirty_arrays']==(n-1).bit_length(),'commutator resources') + b.need(x['gap_bits']==g,'inherited root gap') + b.need(A>=3*g+b.ceil_log2(13*(r+1))and G>=g+b.ceil_log2(r+2),'amplification exponents') + b.need(w>=A and w>=2*g+1,'local precision') + b.need(w>=p+1+b.ceil_log2(N)+A+d+1+(N-1)*G,'complete word error') + b.need(x['coefficient_target_bits']>=p+1+d,'scaled original-input perturbation') + return True + +def main(): + records=[];controls=[] + for r in range(3,257): + try:b.prime_power_data(r) + except ValueError:continue + for p in(1,32,128,1024,1048576): + for d in(0,20,1024): + x=budget(r,p,d);check(x);records.append(x) + for name,key,value in [('underprecision','working_bits',128),('insufficient_dirty_arrays','dirty_arrays',0),('underestimated_calls','leaf_bound',1),('omitted_dirt_magnitude','initial_magnitude_bits',2048),('omitted_input_scaling','coefficient_target_bits',128)]: + x=budget(9,128,20);x[key]=value + try:check(x) + except ValueError as error:controls.append(dict(name=name,rejected=str(error))) + else:raise ValueError('accepted corrupt budget '+name) + ap=argparse.ArgumentParser();ap.add_argument('--out',type=Path,required=True);a=ap.parse_args();a.out.write_text(json.dumps(dict(status='passed',records=records,controls=controls),indent=2)+'\n');print('PASS',len(records),'budgets',len(controls),'controls') +if __name__=='__main__':main() diff --git a/research/ternary-dirty-composition/vendor/pr628/interval_kernel.py b/research/ternary-dirty-composition/vendor/pr628/interval_kernel.py new file mode 100644 index 0000000000..1182175a55 --- /dev/null +++ b/research/ternary-dirty-composition/vendor/pr628/interval_kernel.py @@ -0,0 +1,61 @@ +"""Outward-rounded rational enclosures for prime-power cyclic kernels.""" +from fractions import Fraction as F +import math +from functools import lru_cache + +BITS=1536 +SCALE=1<4:raise ValueError('angle bound') + itheta=(point(0),theta) + total=term=ONE + # Taylor remainder for complex exp: <=exp(4)*4^(N+1)/(N+1)! <128*... + n=0 + while True: + n+=1;term=cmul(term,itheta);term=(scale(term[0],F(1,n)),scale(term[1],F(1,n)));total=cadd(total,term) + remainder=F(128*4**(n+1),math.factorial(n+1)) + if remainder 0, 'empty cycle') + need(direction in (-1, 1), 'invalid direction') + need(0 < beta <= 1, 'invalid margin') + need(norm2(b) <= (1-beta)**2, 'uncertified stable factor') + u = F(1, 1 << bits) + need(u <= beta*beta/2, 'precision too low for closure') + order = list(range(len(x))) if direction == 1 else list(reversed(range(len(x)))) + z, power = ZERO, ONE + for i in order: + z = rounded(add(x[i], mul(b, z)), bits) + power = rounded(mul(b, power), bits) + den = sub(ONE, power) + need(norm2(den) >= (beta/2)**2, 'closure lower bound failed') + seed = rounded(div(z, den), bits) + y, previous = [ZERO]*len(x), seed + for i in order: + previous = rounded(add(x[i], mul(b, previous)), bits) + y[i] = previous + return y + +def dense_solve(x, b, direction): + """Independent exact Gaussian elimination on the cyclic matrix.""" + n = len(x) + a = [[ZERO for _ in range(n)] + [x[i]] for i in range(n)] + for i in range(n): + a[i][i] = add(a[i][i], ONE) + j = (i-direction) % n + a[i][j] = sub(a[i][j], b) + for k in range(n): + pivot = next(i for i in range(k, n) if a[i][k] != ZERO) + a[k], a[pivot] = a[pivot], a[k] + p = a[k][k] + a[k] = [div(v, p) for v in a[k]] + for i in range(n): + if i == k: continue + p = a[i][k] + a[i] = [sub(v, mul(p, w)) for v, w in zip(a[i], a[k])] + return [row[-1] for row in a] + +def residual_bound(x, y, b, beta, direction, bound): + # Neumann inverse norm <= 1/beta converts residual to forward error. + for i in range(len(x)): + residual = sub(sub(y[i], mul(b, y[(i-direction) % len(x)])), x[i]) + need(norm2(residual) <= (beta*bound)**2, 'residual error bound failed') + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--out', type=Path, required=True) + args = parser.parse_args() + cases = [] + for beta in (F(1, 2), F(1, 16), F(1, 4096)): + for unit in (ONE, (F(-1), F(0)), (F(3, 5), F(4, 5))): + b = mul((1-beta, F(0)), unit) + for n in (1, 2, 3, 8, 17, 64): + x = [(F((i*7)%13-6, 8), F((i*11)%17-8, 16)) for i in range(n)] + B = max(abs(v[0])+abs(v[1]) for v in x) + for direction in (-1, 1): + bits = 64 + bound = 6*(B+1)*F(1, 1 << bits)/beta**3 + y = scan(x, b, beta, bits, direction) + residual_bound(x, y, b, beta, direction, bound) + if n <= 8: + exact = dense_solve(x, b, direction) + need(all(norm2(sub(v,w)) <= bound**2 for v,w in zip(y,exact)), 'dense comparison failed') + cases.append(dict(beta=str(beta), b=[str(v) for v in b], length=n, + direction=direction, bits=bits, forward_error_bound=str(bound), + dense_crosscheck=n<=8, residual_check=True)) + controls = [] + for name, x, b, beta, bits, direction in ( + ('unstable', [ONE], ONE, F(1,2), 64, 1), + ('underprecision', [ONE], (F(15,16),F(0)), F(1,16), 3, 1), + ('empty', [], ZERO, F(1,2), 64, 1), + ('bad_direction', [ONE], ZERO, F(1,2), 64, 0), + ): + try: scan(x,b,beta,bits,direction) + except ValueError as error: controls.append(dict(name=name,rejected=str(error))) + else: raise ValueError('negative control accepted: '+name) + x = [ONE, ZERO, ONE] + b, beta = (F(1,2),F(0)), F(1,2) + y = scan(x,b,beta,64,1) + y[0] = add(y[0],ONE) + try: residual_bound(x,y,b,beta,1,F(1,1<<40)) + except ValueError as error: controls.append(dict(name='corrupt_output',rejected=str(error))) + else: raise ValueError('corrupt output accepted') + args.out.write_text(json.dumps(dict(status='passed',cases=cases,controls=controls),indent=2)+'\n') + print(json.dumps(dict(status='passed',cases=len(cases),dense_cases=sum(c['dense_crosscheck'] for c in cases),controls=len(controls)))) + +if __name__ == '__main__': main() diff --git a/research/ternary-dirty-composition/vendor/pr628/weighted.py b/research/ternary-dirty-composition/vendor/pr628/weighted.py new file mode 100644 index 0000000000..da90ee6e83 --- /dev/null +++ b/research/ternary-dirty-composition/vendor/pr628/weighted.py @@ -0,0 +1,118 @@ +"""Exact certificates for varying unit phases on a cyclic neighbor shift.""" +from pathlib import Path +from fractions import Fraction as F +import argparse, importlib.util, json +P=Path(__file__).resolve().parent +s=importlib.util.spec_from_file_location('kernel',P/'check.py');k=importlib.util.module_from_spec(s);s.loader.exec_module(k) +c=k.c + +def scan(x,bs,beta,bits,direction): + c.need(len(x)>0 and len(bs)==len(x),'coefficient length') + c.need(direction in (-1,1),'direction') + c.need(0=(beta/2)**2,'closure denominator') + previous=c.rounded(c.div(z,den),bits);y=[c.ZERO]*len(x) + for i in order: + previous=c.rounded(c.add(x[i],c.mul(bs[i],previous)),bits);y[i]=previous + return y + +def apply(x,state,phases,direction,wrong_phase=False): + n=len(x);c.need(n>0 and len(phases)==n,'phase length') + c.need(all(c.norm2(t)==1 for t in phases),'unit phases') + y=[(v[0]*state['radix'],v[1]*state['radix'])for v in x] + for inside,b in state['factors']: + if inside: + inv=[(phases[(i+direction)%n][0],-phases[(i+direction)%n][1])for i in range(n)] + if wrong_phase:inv=[(v[0],-v[1])for v in phases] + bs=[c.mul(b,t)for t in inv] + y=scan(y,bs,state['beta'],state['bits'],-direction) + y=[c.rounded(c.mul(inv[i],y[(i+direction)%n]),state['bits'])for i in range(n)] + else: + y=scan(y,[c.mul(b,t)for t in phases],state['beta'],state['bits'],direction) + y=[c.rounded(c.neg(c.mul(b,v)),state['bits'])for v in y] + return y + +def matrix(q,phases,direction): + # Independently expand W^j entry-by-entry, including wrap-around phases. + n=len(phases);a=[[c.ZERO for _ in range(n)]for _ in range(n)] + for i in range(n): + weight=c.ONE + for j,v in enumerate(q): + col=(i-direction*j)%n;a[i][col]=c.add(a[i][col],c.mul(v,weight)) + weight=c.mul(weight,phases[col]) + return a + +def residual(x,y,a,bound): + for i,row in enumerate(a): + v=c.ZERO + for z,t in zip(row,y):v=c.add(v,c.mul(z,t)) + c.need(c.norm2(c.sub(v,x[i]))<=bound**2,'expanded weighted residual') + +def solve(a,x): + a=[row[:]+[v]for row,v in zip(a,x)];n=len(a) + for j in range(n): + i=next(i for i in range(j,n)if a[i][j]!=c.ZERO);a[i],a[j]=a[j],a[i] + z=a[j][j];a[j]=[c.div(v,z)for v in a[j]] + for i in range(n): + if i!=j: + z=a[i][j];a[i]=[c.sub(v,c.mul(z,t))for v,t in zip(a[i],a[j])] + return [row[-1]for row in a] + +def main(): + ap=argparse.ArgumentParser();ap.add_argument('--out',type=Path,required=True);a=ap.parse_args() + units=[c.ONE,(F(0),F(1)),(F(3,5),F(4,5)),(F(-5,13),F(12,13))] + cases=[];certs=[];generic=[];controls=[] + for beta in (F(1,2),F(1,16),F(1,4096)): + for n in (1,2,3,8,17,64): + bs=[c.mul((1-beta,F(0)),units[(i*i+3*i+1)%4])for i in range(n)] + # Alternate magnitudes as well as phases. + bs=[(z[0]/(1+i%2),z[1]/(1+i%2))for i,z in enumerate(bs)] + x=[(F(i%5-2,4),F(i%7-3,8))for i in range(n)] + B=max(abs(z[0])+abs(z[1])for z in x);bound=6*(B+1)*F(1,1<<64)/beta**3 + for d in (-1,1): + y=scan(x,bs,beta,64,d) + m=[[c.ZERO for _ in range(n)]for _ in range(n)] + for i in range(n):m[i][i]=c.ONE;m[i][(i-d)%n]=c.sub(m[i][(i-d)%n],bs[i]) + residual(x,y,m,beta*bound) + if n<=8:c.need(all(c.norm2(c.sub(v,t))<=bound**2 for v,t in zip(y,solve(m,x))),'generic dense') + generic.append(dict(beta=str(beta),length=n,direction=d,dense=n<=8)) + sigma,nu,phase_cert=k.irrational_gauge() + for row in json.loads((P/'FACTORS.json').read_text()): + if row['radix'] not in (4,9,16):continue + st=k.certify(row);A=F(st['certificate']['inverse_norm_bound']) + eps=F(st['certificate']['coefficient_error_bound'])+sum(j*(abs(v[0])+abs(v[1]))for j,v in enumerate(st['q']))*nu + c.need(A*eps<1 and A*A*eps/(1-A*eps)+st['budgets'][-1]<=F(1,1<= 2 it uses O(n^alpha) factor calls, where +alpha = log_k(4k-4) < 2 for k > 2, with O(log n) borrowed length-L arrays. +It does not provide a common-label Clifford supplier, bit-reversible compiler, +transform layout, or new multiplication κ. The phase-alias repair is required +at this interface too and is included in `echo.py` before execution. + +## Exact algebra; no commutativity assumption + +Let A_1,...,A_k be arbitrary composable linear maps on equal-length arrays. +Source x, target y and dirty arrays z_1,...,z_(k-1) are all distinct. Define C +as the following ordered sequence of shears: + + z_1 += A_1 x + z_2 += A_2 z_1 + ... + z_(k-1) += A_(k-1) z_(k-2) + +Define D as C with its first shear omitted. Execute + + C; y += A_k z_(k-1); C^-1; + D; y -= A_k z_(k-1); D^-1. + +C^-1 and D^-1 reverse the operation order and negate every shear. They restore +all dirty arrays. The two target updates occur on dirty-chain states that differ +only by the propagated contribution of the first link. Inductively that +difference at z_i is A_i ... A_1 x. Consequently the net target increment is +A_k ... A_1 x. This proof holds for noncommuting maps and arbitrary initial dirt. +The source is never a target of an ideal shear. With k=2, D is empty and this +reduces to the original binary commutator. + +The complete count is + + (k-1) + 1 + (k-1) + (k-2) + 1 + (k-2) = 4k-4. + +It includes both ladders, both inverse ladders and both target updates. There +is no clean length-L work array or implicit copying. The two endpoint maps +are each called twice; each interior map is called four times. + +## Recursive schedule and storage + +Partition n factors into k' = min(k,n) consecutive groups, as evenly as +possible, preserving their order. Use k'-1 dirty arrays for this node. Recursively +implement each group map using a disjoint pool of deeper borrowed arrays, +which can be reused between calls because every call restores that pool. +Neither an ancestor source nor an ancestor target belongs to the deeper pool. +All mutable arrays, including surplus scratch, are checked distinct at entry. + +For group sizes n_i, the exact recurrences implemented by `resources` are + + S(1) = 0, N(1) = 1 + S(n) = k'-1 + max_i S(n_i) + N(n) = 2 N(n_1) + 2 N(n_k') + 4 sum_(10, a sufficiently large *fixed* k makes alpha<1+epsilon. +The flat choice k=n instead uses n-1 borrowed arrays and exactly 4n-4 calls. + +| Factors | Binary: arrays / calls | Fanout 8: arrays / calls | Flat: arrays / calls | +|---|---:|---:|---:| +| 8 | 3 / 64 | 7 / 28 | 7 / 28 | +| 16 | 4 / 256 | 8 / 112 | 15 / 60 | +| 64 | 6 / 4096 | 14 / 784 | 63 / 252 | +| 512 | 9 / 262144 | 21 / 21952 | 511 / 2044 | + +The generator streams instructions using O(k log_k n) active scheduling +records. It does not retain the expanded word. A positive or negative child +call takes the same resources. Negative calls reverse the full instruction +word, rather than negating signs in forward order. + +## Exact restoration despite rounded, nonlinear increments + +A valid PR628 leaf adds a deterministic function of its source to its target, +restores its source exactly, and does not read its target when computing the +increment. Its negative leaf subtracts exactly that same grid value. Fixed, +non-aliased phase and factor data are essential here. + +Inductively, a recursive call adds a deterministic function of its source and +initial deeper dirt, independently of its target, and restores the source and +all deeper dirt. Thus C's child calls can be undone in reverse order: each sees +the same source and deeper dirt as its forward mate. The intervening target +update changes only y, which is excluded from every ladder's scratch pool. +The same argument applies to D. This proves exact source and scratch restoration +at every level for valid finite-grid inputs. Reversing the complete word gives +an exact inverse. It does **not** prove that the rounded target increment is +independent of dirt; the error estimate below bounds that dependence. + +As with the pinned leaf, all input contracts must hold throughout execution. +This is not transactional rollback on arbitrary malformed coefficients or +stateful callbacks. The explicit alias checks reject ordinary list-identity +aliasing before any mutation; arbitrary overlapping views are outside the API. + +## Complete inherited error and cost budget + +Use PR628's leaf estimates with n=r-1, beta in (0,1], grid u=2^-w, and +multipliers bounded by r. The same hypotheses and preparation remain required. +Let D bound the initial joint max norm, K=r/beta, +a=13(r+1)/beta^3 and G=2+K. A rounded leaf on input norm at most B has error +at most a(B+1)u; an ideal shear has Lipschitz norm at most 1+K. Enforce +au<=1 and u<=beta^2/2. + +Writing M_j for the computed joint norm after j leaves gives +(M_j + 1) <= G^j(D+1). Comparing the complete rounded instruction word with the +complete ideal word gives, by propagation through each remaining ideal shear, + + E_N <= N a (D+1) u G^(N-1). + +This argument applies to the actual expanded word, including every restoration +operation. Substitute the new exact N; do not reuse the predecessor's 4n² +upper bound when measuring the improvement. The ideal identity proved above +cancels all initial borrowed dirt. Hence this E_N bounds target error while +actual source and scratch restoration are exact. + +For requested p bits choose + + w >= p+1+ceil(log2(N a (D+1)))+(N-1)ceil(log2 G), + +as well as the two leaf precision conditions. This budgets execution error +at most 2^(-p-1). The inherited coefficient/phase preparation error must still +be budgeted to 2^(-p-1), scaled for the original source norm as specified in +PR628. It does not receive a free exact phase table from this construction. + +Under PR628's log2(beta^-1)=O(r³), fixed fanout k gives + + N = O(r^alpha), + w = O(p + log(D+1) + r^(3+alpha)). + +Joint transient integer magnitudes add O(log(D+1)+N log G) bits; the leaf's +causal state and closure add O(log(beta^-1)+log r), all covered by that budget. +Borrowed data storage is O(L log r) words for fixed k. Clean arithmetic storage, +read-only factor descriptors, indexing and fast-arithmetic workspace retain +PR628's qualifications. Charging the same factor preparation and leaf arithmetic +as PR628 gives the conditional local work upper bound + + soft-O((L r^alpha + r³) (p + log(D+1) + r^(3+alpha))) + +plus charged phase-oracle and routing work. Every leaf still includes its +forward pass, output pass, undo pass and validation/access costs; none are +removed by a speedup claim. With k=8, alpha=log_8 28≈1.602452, replacing the +binary precision power 5 by about 4.602452. With flat k=n the corresponding +power is 4, but borrowed arrays become O(r), not O(log r). + +The Fraction prototype tests identities, rounding and restoration; its timings +are **not** evidence for a fast fixed-precision implementation. No complete +multiplication recurrence follows without integrating the required transform, +paid storage/layout, bit supplier and all conditional assembly assumptions. + +## Evidence and attribution + +`verify_echo.py` compares the streamed ideal word against direct composition of +arbitrary noncommuting 2x2 integer matrices. It separately compares rounded +execution with an integer-grid arithmetic interpreter (sharing only the tested +schedule), and with PR628's independently assembled dense cyclic inverse oracle. +The latter checks the complete error bound at a precision chosen by the formula +above, with positive, zero and negative initial dirt. These finite tests support +the implementation; they are not a formal proof of the general statement. +The algebraic and inductive arguments above state the general obligations. + +The schedule and analysis here were prepared for @androolloyd with substantial +OpenAI Codex assistance, under Apache-2.0. The rounded leaf and original binary +dirty inverse are Chafik Boukhalfa / chafreaky's PR628 work, with OpenAI Codex +assistance, built on Ali Romman's PR621 kernel and the sources retained in +SOURCE.json. This note claims an improvement relative to that pinned binary +schedule, not priority over all historical reversible-pebbling literature. diff --git a/research/ternary-dirty-composition/vendor/pr673/echo.py b/research/ternary-dirty-composition/vendor/pr673/echo.py new file mode 100644 index 0000000000..76a3117136 --- /dev/null +++ b/research/ternary-dirty-composition/vendor/pr673/echo.py @@ -0,0 +1,75 @@ +"""Multiway dirty echo composition of PR628's restored-input leaf shears. + +Prepared for androolloyd with substantial OpenAI Codex assistance. Apache-2.0. +No new multiplication exponent is asserted. Read ECHO-PROOF.md for the storage +tradeoff and the complete inherited local error recurrence. +""" + + +def partition(count, fanout): + if count < 1 or fanout < 2: + raise ValueError('positive factor count and fanout >= 2 required') + k = min(count, fanout) + quotient, remainder = divmod(count, k) + return [quotient + (i < remainder) for i in range(k)] + + +def resources(count, fanout): + if count < 1 or fanout < 2: + raise ValueError('positive factor count and fanout >= 2 required') + if count == 1: + return 0, 1 + sizes = partition(count, fanout) + children = [resources(n, fanout) for n in sizes] + scratch = len(sizes)-1 + max(depth for depth, _ in children) + calls = sum((2 if i in (0, len(sizes)-1) else 4)*cost + for i, (_, cost) in enumerate(children)) + return scratch, calls + + +def instructions(first, count, src, dst, scratch_first, fanout, sign=1): + """Stream the exact instruction word or its reverse inverse.""" + if count == 1: + yield src, dst, first, sign + return + sizes = partition(count, fanout) + k = len(sizes) + offsets = [first] + for size in sizes[:-1]: + offsets.append(offsets[-1]+size) + # C: populate the whole dirty chain. D: the same chain without its first link. + chain = [(offsets[i], sizes[i], src if i == 0 else scratch_first+i-1, + scratch_first+i, 1) for i in range(k-1)] + last = (offsets[-1], sizes[-1], scratch_first+k-2, dst, 1) + invert = lambda commands: [(a,n,s,t,-q) for a,n,s,t,q in reversed(commands)] + commands = chain + [last] + invert(chain) + chain[1:] + invert([last]) + invert(chain[1:]) + if sign == -1: + commands = invert(commands) + for a,n,s,t,q in commands: + yield from instructions(a,n,s,t,scratch_first+k-1,fanout,q) + + +def compose(leaf_module, x, y, factors, scratch, phases, beta, bits, direction, + sign=1, fanout=8): + """Apply the dirty echo using a pinned PR628 leaf, restoring x and scratch.""" + if direction not in (-1,1) or sign not in (-1,1): + raise ValueError('orientation and sign') + depth, count = resources(len(factors), fanout) + arrays = [x,y]+scratch + if len(scratch) < depth: + raise ValueError('dirty depth') + if len({id(a) for a in arrays}) != len(arrays): + raise ValueError('all ancestor arrays distinct') + if any(phases is a for a in arrays): + raise ValueError('phase array aliases mutable data') + if not x or any(len(a) != len(x) for a in arrays) or len(phases) != len(x): + raise ValueError('array lengths') + if any(a*a+b*b != 1 for a,b in phases): + raise ValueError('unit phases') + stats = dict(leaves=0,scalar_steps=0) + for src,dst,index,q in instructions(0,len(factors),0,1,2,fanout,sign): + leaf_module.leaf(arrays[src],arrays[dst],factors[index],phases,beta,bits, + direction,q,stats) + if stats['leaves'] != count: + raise ValueError('leaf accounting') + return stats diff --git a/research/ternary-dirty-composition/verify.py b/research/ternary-dirty-composition/verify.py new file mode 100644 index 0000000000..8cf5b2cc50 --- /dev/null +++ b/research/ternary-dirty-composition/verify.py @@ -0,0 +1,455 @@ +"""Exact, offline checks for the ternary dirty-shear construction. + +Two symbolic engines independently check the emitted word: a free additive +term algebra for arbitrary deterministic nonlinear leaves, and a free +noncommutative module for the ideal ordered product. Pinned PR628 arithmetic +then supplies rounded cyclic leaves and independent dense reference solves. +""" + +import argparse +from collections import Counter +from fractions import Fraction as F +import hashlib +import importlib.util +import itertools +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def module(name, path): + spec = importlib.util.spec_from_file_location(name, path) + result = importlib.util.module_from_spec(spec) + spec.loader.exec_module(result) + return result + + +def digest(value): + return hashlib.sha256(json.dumps(value, sort_keys=True, separators=(",", ":")).encode()).hexdigest() + + +def source_check(): + pins = json.loads((ROOT / "SOURCES.json").read_text()) + for entry in pins["sources"]: + need(hashlib.sha256((ROOT / entry["path"]).read_bytes()).hexdigest() == entry["sha256"], + "source pin mismatch: " + entry["path"]) + return {"base_commit": pins["base_commit"], "pr628_commit": pins["pr628_commit"], + "pr673_commit": pins["pr673_commit"], + "source_files": len(pins["sources"])} + + +def add_terms(target, increment, sign): + result = target.copy() + for term, coefficient in increment.items(): + value = result.get(term, 0) + sign * coefficient + if value: + result[term] = value + else: + result.pop(term, None) + return result + + +def nonlinear_check(steps, slots, inverse): + # Each atom is either an initial-array symbol or F_i(canonical expression). + # Interning gives equal function calls the same atom without evaluating F_i. + atoms = {} + + def atom(key): + if key not in atoms: + atoms[key] = len(atoms) + return atoms[key] + + state = [{atom(("initial", i)): 1} for i in range(slots)] + initial = [x.copy() for x in state] + # An extra target translation detects an illicit target-dependent increment. + translated = [x.copy() for x in state] + offset = atom(("target_offset",)) + translated[1][offset] = 1 + + def run(word, values): + for factor, source, target, sign in word: + key = ("function", factor, tuple(sorted(values[source].items()))) + values[target] = add_terms(values[target], {atom(key): 1}, sign) + + run(steps, state) + need(all(state[i] == initial[i] for i in range(slots) if i != 1), "nonlinear restoration") + run(steps, translated) + need(translated[1] == add_terms(state[1], {offset: 1}, 1), "target-independent increment") + run(inverse, state) + need(state == initial, "nonlinear exact inverse") + + +def linear_check(steps, n, slots, inverse=None): + # Terms are (ordered factor word, initial register). Multiplication is + # concatenation on the LEFT, so factors are never silently commuted. + state = [{((), i): 1} for i in range(slots)] + initial = [x.copy() for x in state] + + def run(word): + for factor, source, target, sign in word: + increment = {((factor,) + operators, register): coefficient + for (operators, register), coefficient in state[source].items()} + state[target] = add_terms(state[target], increment, sign) + + run(steps) + expected = [x.copy() for x in initial] + expected[1][(tuple(reversed(range(n))), 0)] = 1 + need(state == expected, "ordered linear product or dirty endpoint") + if inverse is not None: + run(inverse) + need(state == initial, "linear exact inverse") + + +def binary_calls(n): + q = 1 << (n.bit_length() - 1) + return 3 * q * n - 2 * q * q + + +def resource_checks(t, old): + rows = [] + symbolic_sizes = list(range(1, 65)) + [81, 128, 243] + for n in symbolic_sizes: + calls, scratch = t.resources(n) + steps, inverse = list(t.word(n)), list(t.word(n, -1)) + need(len(steps) == calls, "emitted leaf count") + need(max(max(s, d) for _, s, d, _ in steps) == scratch + 1, "emitted peak scratch") + need(all(0 <= f < n and s != d and sg in (-1, 1) for f, s, d, sg in steps), "leaf addresses") + need(inverse == [(f, s, d, -sg) for f, s, d, sg in reversed(steps)], "inverse ordering") + nonlinear_check(steps, scratch + 2, inverse) + linear_check(steps, n, scratch + 2, inverse) + rows.append({"factors": n, "ternary_leaves": calls, "dirty_arrays": scratch, + "binary_leaves": binary_calls(n), "binary_dirty_arrays": (n - 1).bit_length(), + "word_sha256": digest(steps)}) + + # Independently minimize over ALL placements of balanced child sizes. + # This DP does not assume that the cheapest placement puts extras at ends. + counts = [0, 1, 4] + predecessor = [0, 1, 4] + placements = 0 + for n in range(3, 10001): + q, r = divmod(n, 3) + sizes = [q + 1] * r + [q] * (3 - r) + alternatives = set(itertools.permutations(sizes)) + counts.append(min(2 * counts[a] + 4 * counts[b] + 2 * counts[c] + for a, b, c in alternatives)) + placements += len(alternatives) + a, b, c = sizes + predecessor.append(2 * predecessor[a] + 4 * predecessor[b] + 2 * predecessor[c]) + for n in range(1, 10001): + power, depth = 1, 0 + while 3 * power <= n: + power *= 3 + depth += 1 + scratch = 2 * depth + (0 if n == power else 1 if n <= 2 * power else 2) + need(t.resources(n) == (counts[n], scratch), "independent resource recurrence") + ceiling = depth + (n != power) + need(counts[n] <= 8 ** ceiling and scratch <= 2 * ceiling, "uniform recurrence bounds") + need(counts[n] <= predecessor[n], "balanced split refinement increased calls") + + # Exercise the actual pinned binary dispatcher, replacing only its leaf by + # a recorder. This verifies the credited binary count against source bytes. + saved = old.leaf + baseline = [] + try: + for n in range(1, 65): + log = [] + old.leaf = lambda x, y, factor, phases, beta, bits, d, sign, stats: log.append((factor, sign)) + scratch = [[old.c.ZERO] for _ in range((n - 1).bit_length())] + old.compose([old.c.ONE], [old.c.ZERO], list(range(n)), scratch, + [old.c.ONE], F(1, 2), 128, 1) + need(len(log) == binary_calls(n), "pinned binary dispatcher count") + baseline.append(len(log)) + finally: + old.leaf = saved + return {"symbolic_words": rows, "integer_recurrence_cases": 10000, + "balanced_size_placements": placements, + "strict_improvements_over_pr673": sum(counts[n] < predecessor[n] for n in range(1, 10001)), + "pinned_binary_words": len(baseline), "pinned_binary_counts_sha256": digest(baseline)} + + +def echo_checks(t, echo): + """Audit the actual PR673 word and compare a partition-only specialization.""" + rows = [] + original_partition = echo.partition + + def end_placement(n, fanout): + need(fanout == 3, "this specialization supports fanout three only") + if n < 3: + return [1] * n + q, r = divmod(n, 3) + return [q + (r > 0), q, q + (r > 1)] + + def canonical(steps): + return [(factor, src, dst, sign) for src, dst, factor, sign in steps] + + for n in list(range(1, 65)) + [81, 127, 128, 243, 255]: + scratch, calls = echo.resources(n, 3) + steps = canonical(echo.instructions(0, n, 0, 1, 2, 3)) + inverse = canonical(echo.instructions(0, n, 0, 1, 2, 3, -1)) + need(len(steps) == calls, "PR673 emitted count") + nonlinear_check(steps, scratch + 2, inverse) + linear_check(steps, n, scratch + 2, inverse) + try: + # Source bytes stay unchanged. Only the partition hook is replaced + # in this in-memory instance to isolate the split-placement effect. + echo.partition = end_placement + changed_scratch, changed_calls = echo.resources(n, 3) + changed = canonical(echo.instructions(0, n, 0, 1, 2, 3)) + changed_inverse = canonical(echo.instructions(0, n, 0, 1, 2, 3, -1)) + finally: + echo.partition = original_partition + need((changed_calls, changed_scratch) == t.resources(n), "partition-only resources") + need(changed == list(t.word(n)) and changed_inverse == list(t.word(n, -1)), + "independent dispatcher differs from partition-only source") + need(changed_scratch == scratch and changed_calls <= calls, "scratch-preserving refinement") + rows.append({"factors": n, "dirty_arrays": scratch, "pr673_calls": calls, + "refined_calls": changed_calls, "pr673_word_sha256": digest(steps), + "refined_word_sha256": digest(changed)}) + + return {"fanout": 3, "source_words": rows} + + +def ceil_log2(value): + value = F(value) + need(value > 0, "positive logarithm argument") + ceiling = (value.numerator + value.denominator - 1) // value.denominator + return max(0, (ceiling - 1).bit_length()) + + +def execution_budget(calls, beta, scale_bound, initial_bound, target_bits): + a = 13 * (scale_bound + 1) / beta ** 3 + growth = 2 + F(scale_bound) / beta + bits = max(ceil_log2(a), ceil_log2(2 / beta ** 2), + target_bits + 1 + ceil_log2(calls * a * (initial_bound + 1)) + + (calls - 1) * ceil_log2(growth)) + bound = calls * a * (initial_bound + 1) * F(1, 1 << bits) * growth ** (calls - 1) + need(a <= 1 << bits and F(1, 1 << bits) <= beta ** 2 / 2, "leaf precision assumptions") + need(bound <= F(1, 1 << (target_bits + 1)), "complete execution error budget") + return bits, bound + + +def rounded_case(t, old, factors, length, direction, dirt, beta, scale_bound, kernel=None): + c = old.c + n = len(factors) + calls, required = t.resources(n) + x = [(F(i % 5 - 2, 4), F(i % 3 - 1, 8)) for i in range(length)] + y = [(F(dirt + i, 4), F(dirt - i, 8)) for i in range(length)] + # One additional spectator makes an off-by-one workspace use observable. + scratch = [[(F(dirt + 2 * i + j, 4), F(dirt - 3 * i - j, 8)) + for i in range(length)] for j in range(required + 1)] + initial = [v[:] for v in [x, y, *scratch]] + D = max(abs(real) + abs(imag) for v in initial for real, imag in v) + bits, bound = execution_budget(calls, beta, scale_bound, D, 128 if kernel else 64) + units = [c.ONE, (F(0), F(1)), (F(3, 5), F(4, 5)), (F(-5, 13), F(12, 13))] + values = [units[(i * i + i + 1) % 4] for i in range(length)] + need(all(c.norm2(v) == 1 for v in values), "unit phases") + + class Phases: + reads = 0 + + def __getitem__(self, index): + self.reads += 1 + return values[index] + + phases = Phases() + stats = {"leaves": 0, "scalar_steps": 0} + + def leaf(src, dst, factor, sign): + old.leaf(src, dst, factor, phases, beta, bits, direction, sign, stats) + + t.compose(x, y, factors, scratch, leaf) + need(x == initial[0] and scratch == initial[2:], "rounded source/scratch/spectator restoration") + need(stats == {"leaves": calls, "scalar_steps": 3 * length * calls}, "all leaf passes charged") + multiplicities = Counter(f for f, _, _, _ in t.word(n)) + phase_reads = sum(times * ((6 if factors[f][0] else 5) * length - 2) + for f, times in multiplicities.items()) + need(phases.reads == phase_reads, "coefficient and phase reads charged") + net = [c.sub(v, start) for v, start in zip(y, initial[1])] + if kernel is None: + exact = old.exact_operator(initial[0], factors, values, direction) + else: + # Expand the full polynomial in the cyclic shift, then solve it once. + # This reference does not use the factor-lifting or ternary recurrences. + exact = old.w.solve(old.w.matrix(kernel["q"], values, direction), initial[0]) + need(all(c.norm2(c.sub(v, ref)) <= bound ** 2 for v, ref in zip(net, exact)), "dense error comparison") + net_hash = digest([[str(a), str(b)] for a, b in net]) + t.compose(x, y, factors, scratch, leaf, -1) + need([x, y, *scratch] == initial, "rounded exact inverse") + need(stats["leaves"] == 2 * calls and phases.reads == 2 * phase_reads, "inverse cost") + return {"factors": n, "length": length, "direction": direction, "dirt": dirt, + "working_bits": bits, "target_bits": 128 if kernel else 64, + "leaves": calls, "dirty_arrays": required, "spectator_arrays": 1, + "phase_reads": phase_reads, "lift_loop_visits": 3 * length * calls, + "net_sha256": net_hash} + + +def rounded_checks(t, old): + cases = [] + for n in (1, 2, 3, 4, 5, 8, 9, 15, 27): + factors = [(i % 2 == 0, (F(1, 4), F((-1) ** i, 8)), F(3 if i == 0 else 1)) + for i in range(n)] + for length in (1, 2, 4): + for direction in (-1, 1): + for dirt in (0, 7): + cases.append(rounded_case(t, old, factors, length, direction, dirt, F(1, 2), 3)) + n = 58 + factors = [(i % 2 == 0, (F(1, 4), F((-1) ** i, 8)), F(3 if i == 0 else 1)) for i in range(n)] + for direction in (-1, 1): + cases.append(rounded_case(t, old, factors, 1, direction, -13, F(1, 2), 3)) + return cases + + +def kernel_checks(t, old): + rows = json.loads((ROOT / "vendor/pr628/FACTORS.json").read_text()) + cases = [] + for row in rows: + if row["radix"] not in (4, 9, 16): + continue + state = old.w.k.certify(row) + factors = [(inside, b, F(row["radix"] if i == 0 else 1)) + for i, (inside, b) in enumerate(state["factors"])] + for length in ((1,) if row["radix"] == 16 else (1, 3)): + for direction in (-1, 1): + for dirt in (-7, 11): + result = rounded_case(t, old, factors, length, direction, dirt, + state["beta"], row["radix"], state) + result.update(radix=row["radix"], embedding=row["embedding"]) + cases.append(result) + need(cases, "missing kernel fixtures") + return cases + + +def uniform_budgets(t, base): + rows = [] + for r in range(3, 257): + try: + base.prime_power_data(r) + except ValueError: + continue + calls, scratch = t.resources(r - 1) + for p in (1, 128, 1048576): + for dirt_bits in (0, 20, 1024): + prepared = base.budgets(r, p + 1 + dirt_bits) + base.check(prepared) + g = prepared["g"] + A = 3 * g + base.ceil_log2(13 * (r + 1)) + G = g + base.ceil_log2(r + 2) + common = p + 1 + A + dirt_bits + 1 + + def bits(N): + return max(A, 2 * g + 1, common + base.ceil_log2(N) + (N - 1) * G) + + working = bits(calls) + # Check the exponent inequality directly, not a huge 2^w. + need(working >= A and working >= 2 * g + 1, "uniform local precision") + need(working - p - 1 >= base.ceil_log2(calls) + A + dirt_bits + 1 + (calls - 1) * G, + "uniform propagated precision") + rows.append({"radix": r, "target_bits": p, "dirt_bits": dirt_bits, + "leaves": calls, "dirty_arrays": scratch, "working_bits": working, + "binary_exact_working_bits": bits(binary_calls(r - 1)), + "inherited_4n2_working_bits": bits(4 * (r - 1) ** 2), + "prepared_target_bits": prepared["target_bits"]}) + return {"cases": len(rows), "rows_sha256": digest(rows), + "examples": [row for row in rows if row["radix"] in (4, 9, 16, 64, 256) + and row["target_bits"] == 128 and row["dirt_bits"] == 20]} + + +def controls(t): + rejected = [] + + def reject(name, fn): + try: + fn() + except ValueError: + rejected.append(name) + else: + raise ValueError("negative control accepted: " + name) + + steps = list(t.word(9)) + slots = 2 + t.resources(9)[1] + for i in range(len(steps)): + reject("omit_leaf_" + str(i), lambda i=i: linear_check(steps[:i] + steps[i + 1:], 9, slots)) + f, s, d, sg = steps[i] + changed = steps[:i] + [(f, s, d, -sg)] + steps[i + 1:] + reject("flip_leaf_" + str(i), lambda changed=changed: linear_check(changed, 9, slots)) + reject("commute_factor_order", lambda: linear_check([(8-f, s, d, sg) for f, s, d, sg in steps], 9, slots)) + reject("negate_without_reversing", lambda: nonlinear_check( + steps, slots, [(f, s, d, -sg) for f, s, d, sg in steps])) + reject("alias_ternary_scratch", lambda: linear_check( + [(f, 2 if s == 3 else s, 2 if d == 3 else d, sg) for f, s, d, sg in steps], 9, slots)) + + def valid(**overrides): + arguments = dict(source=[1], target=[2], factors=[0, 1, 2], + scratch=[[3], [4]], leaf=lambda x, y, f, s: None) + arguments.update(overrides) + t.compose(**arguments) + + shared = [1] + reject("source_target_alias", lambda: valid(source=shared, target=shared)) + reject("scratch_source_alias", lambda: valid(source=shared, scratch=[shared, [4]])) + reject("scratch_target_alias", lambda: valid(target=shared, scratch=[shared, [4]])) + reject("scratch_pair_alias", lambda: valid(scratch=[shared, shared])) + reject("insufficient_scratch", lambda: valid(scratch=[[3]])) + reject("empty_factor_list", lambda: valid(factors=[])) + reject("unequal_array_lengths", lambda: valid(target=[1, 2])) + reject("empty_array", lambda: valid(source=[])) + reject("invalid_sign", lambda: valid(sign=0)) + reject("bool_sign", lambda: valid(sign=True)) + + # Concrete nonlinear example: restoration survives, but the increment may + # depend on dirt. A(x)=x, B(u)=u^2, C(v)=v gives 2*u0*x+x^2. + increments = [] + for dirt in (0, 1): + source, target, u, v = [1], [0], [dirt], [7] + + def leaf(x, y, factor, sign): + y[0] += sign * (x[0] ** 2 if factor == 1 else x[0]) + + t.compose(source, target, [0, 1, 2], [u, v], leaf) + need(source == [1] and u == [dirt] and v == [7], "nonlinear example restoration") + increments.append(target[0]) + need(increments == [1, 3], "nonlinear dirt-dependence control") + return {"rejected": rejected, "nonlinear_dirt_example": increments} + + +def verify(): + sources = source_check() + t = module("ternary", ROOT / "ternary.py") + old = module("pr628_dirty", ROOT / "vendor/pr628/dirty.py") + base = module("pr628_budgets", ROOT / "vendor/pr628/check_budgets.py") + echo = module("pr673_echo", ROOT / "vendor/pr673/echo.py") + result = {"status": "PASS_TERNARY_DIRTY_COMPOSITION", "sources": sources, + "resources": resource_checks(t, old), "controls": controls(t), + "pr673_comparison": echo_checks(t, echo)} + print("PASS symbolic endpoints, resource recurrences and negative controls", flush=True) + result["rounded"] = rounded_checks(t, old) + print("PASS", len(result["rounded"]), "rounded generic compositions", flush=True) + result["kernels"] = kernel_checks(t, old) + print("PASS", len(result["kernels"]), "certified-kernel compositions", flush=True) + result["uniform_precision"] = uniform_budgets(t, base) + return result + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--write", type=Path, help="write a new certificate instead of comparing EXPECTED.json") + args = parser.parse_args() + result = verify() + if args.write: + with args.write.open("x") as stream: + stream.write(json.dumps(result, indent=2, sort_keys=True) + "\n") + else: + expected = json.loads((ROOT / "EXPECTED.json").read_text()) + need(result == expected, "expected certificate mismatch") + print(result["status"]) + + +if __name__ == "__main__": + main()