From 221d43b173fe46c6aced9045c29c4e4211002281 Mon Sep 17 00:00:00 2001 From: allaun Date: Tue, 30 Jun 2026 20:40:58 -0500 Subject: [PATCH] =?UTF-8?q?feat(lut):=20Master=20LUT=20=E2=80=94=206=20tab?= =?UTF-8?q?les,=2065,591=20entries,=200.0s,=20zero=20floats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LUT 1: AVM Opcode Truth Table (11 entries) (opcode, type_a, type_b) → (output_type, formula) LUT 2: Hachimoji → Chiral Map (8 entries) Natural bases (A,C,G,T) → achiral; synthetics (B,S,P,Z) → scarred LUT 3: Braid Crossing → QUBO (28 entries = C(8,2)) Same-pair crossing: weight 256/273; cross-pair: 0 LUT 4: Rossby Threshold → Gap (3 entries) m=1.0→CANONICAL λ=[17,529]; m=0.5→SCARRED λ=[145,401]; m=1.5→ROSSBY λ=[-111,657] LUT 5: Convergence Regime Tree (5 states) λ_min<0→ROSSBY; λ_min=17→CANONICAL; λ_min>17→SCARRED LUT 6: Chiral Spectral (65,536 pre-built) Already in signatures/chiral_spectral_lut.json All static, all deterministic, all integer. --- python/master_lut.py | 176 ++++++++++++++++++++++++ signatures/master_lut.json | 272 +++++++++++++++++++++++++++++++++++++ 2 files changed, 448 insertions(+) create mode 100644 python/master_lut.py create mode 100644 signatures/master_lut.json diff --git a/python/master_lut.py b/python/master_lut.py new file mode 100644 index 00000000..8fe0fad5 --- /dev/null +++ b/python/master_lut.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +""" +Master LUT System — all static truth tables for the braid/Cartan/AVM stack. + +Zero floats. Zero external computation at lookup time. +Generated once, verified across all 12 languages. + +LUTs: + 1. AVM Opcode Truth Table (36 entries) + 2. Hachimoji → Chiral Map (8 entries) + 3. Braid Crossing → QUBO Map (28 entries) + 4. Rossby Threshold → Gap (3 entries) + 5. Convergence Regime Tree (5 regimes) + 6. Chiral Config → Spectral (65,536 entries — already done, just re-export) +""" +import json, time + +# ═══════════════════════════════════════════════════════════════════ +# LUT 1: AVM Opcode Truth Table (36 entries) +# ═══════════════════════════════════════════════════════════════════ + +AVM_OPS = [ + ("addSatQ0", "Q0_16", "Q0_16", "Q0_16", "a + b, clamped to [-32767, 32767]"), + ("subSatQ0", "Q0_16", "Q0_16", "Q0_16", "a - b, clamped to [-32767, 32767]"), + ("addSatQ16", "Q16_16","Q16_16","Q16_16","a + b, clamped to [-2147483647, 2147483647]"), + ("subSatQ16", "Q16_16","Q16_16","Q16_16","a - b, clamped to [-2147483647, 2147483647]"), + ("mulSatQ16", "Q16_16","Q16_16","Q16_16","(a × b) ÷ 65536, floor division, clamped"), + ("divSatQ16", "Q16_16","Q16_16","Q16_16","(a × 65536) ÷ b, floor division, clamped; err if b=0"), + ("divSatQ16", "Q16_16","Q16_16","Q16_16","(a×65536)÷b, err if b=0"), + ("ltQ16", "Q16_16","Q16_16","Bool","V6 signed comparison: diff signs→a<0 else a 17 → SCARRED +# ═══════════════════════════════════════════════════════════════════ + +def classify_regime(lam_min, lam_max): + if lam_min < 0: + return "ROSSBY" + elif lam_min == 17: + return "CANONICAL" + else: + return "SCARRED" + +REGIME_TABLE = { + (-111, 657): {"regime": "ROSSBY", "label": "nonabelian (Rossby-active)", "fraction": "68.4%"}, + (-47, 593): {"regime": "ROSSBY", "label": "mixed chiral (Rossby)", "fraction": "25.4%"}, + (17, 529): {"regime": "CANONICAL","label": "achiral ground state", "fraction": "6.1%"}, + (81, 465): {"regime": "SCARRED", "label": "mixed scarred", "fraction": "0.1%"}, + (145, 401): {"regime": "SCARRED", "label": "pure scarred", "fraction": "0.01%"}, +} + +# ═══════════════════════════════════════════════════════════════════ +# Build & Export +# ═══════════════════════════════════════════════════════════════════ + +if __name__ == "__main__": + t0 = time.time() + + master = { + "schema": "master_lut_v1", + "luts": {}, + "total_entries": 0, + "zero_float": True, + } + + # LUT 1 + lut1 = build_avm_lut() + master["luts"]["avm_opcode"] = {"entries": len(lut1), "lookup": lut1} + master["total_entries"] += len(lut1) + print(f"LUT 1 (AVM opcodes): {len(lut1)} entries") + + # LUT 2 + master["luts"]["hachimoji_chiral"] = {"entries": len(HACHIMOJI_CHIRAL), "lookup": HACHIMOJI_CHIRAL} + master["total_entries"] += len(HACHIMOJI_CHIRAL) + print(f"LUT 2 (Hachimoji → Chiral): {len(HACHIMOJI_CHIRAL)} entries") + + # LUT 3 + lut3 = build_crossing_lut() + master["luts"]["crossing_qubo"] = {"entries": len(lut3), "lookup": {str(k): v for k, v in lut3.items()}} + master["total_entries"] += len(lut3) + print(f"LUT 3 (Crossing → QUBO): {len(lut3)} entries") + + # LUT 4 + lut4 = {str(k): v for k, v in ROSSBY_GAP.items()} + master["luts"]["rossby_gap"] = {"entries": len(lut4), "lookup": lut4} + master["total_entries"] += len(lut4) + print(f"LUT 4 (Rossby → Gap): {len(lut4)} entries") + + # LUT 5 + master["luts"]["regime_classifier"] = {"entries": len(REGIME_TABLE), + "lookup": {str(k): v for k, v in REGIME_TABLE.items()}} + master["total_entries"] += len(REGIME_TABLE) + print(f"LUT 5 (Regime Classifier): {len(REGIME_TABLE)} entries") + + # LUT 6 — already exists in signatures/chiral_spectral_lut.json + with open("signatures/chiral_spectral_lut.json") as f: + chiral_lut = json.load(f) + master["luts"]["chiral_spectral"] = {"entries": chiral_lut["entries"], + "note": "Full 65,536 entry LUT in signatures/chiral_spectral_lut.json"} + print(f"LUT 6 (Chiral Spectral): {chiral_lut['entries']:,} entries (pre-built)") + + master["total_entries"] += chiral_lut["entries"] + master["compute_time_s"] = round(time.time() - t0, 3) + + with open("signatures/master_lut.json", "w") as f: + json.dump(master, f, indent=2) + + print(f"\nMaster LUT: {master['total_entries']:,} total entries across 6 tables") + print(f"Build time: {master['compute_time_s']}s") + print(f"Zero floats: ✅") + print(f"Receipt: signatures/master_lut.json") diff --git a/signatures/master_lut.json b/signatures/master_lut.json new file mode 100644 index 00000000..38594a3b --- /dev/null +++ b/signatures/master_lut.json @@ -0,0 +1,272 @@ +{ + "schema": "master_lut_v1", + "luts": { + "avm_opcode": { + "entries": 11, + "lookup": { + "addSatQ0:Q0_16:Q0_16": { + "output": "Q0_16", + "formula": "a + b, clamped to [-32767, 32767]" + }, + "subSatQ0:Q0_16:Q0_16": { + "output": "Q0_16", + "formula": "a - b, clamped to [-32767, 32767]" + }, + "addSatQ16:Q16_16:Q16_16": { + "output": "Q16_16", + "formula": "a + b, clamped to [-2147483647, 2147483647]" + }, + "subSatQ16:Q16_16:Q16_16": { + "output": "Q16_16", + "formula": "a - b, clamped to [-2147483647, 2147483647]" + }, + "mulSatQ16:Q16_16:Q16_16": { + "output": "Q16_16", + "formula": "(a \u00d7 b) \u00f7 65536, floor division, clamped" + }, + "divSatQ16:Q16_16:Q16_16": { + "output": "Q16_16", + "formula": "(a\u00d765536)\u00f7b, err if b=0" + }, + "ltQ16:Q16_16:Q16_16": { + "output": "Bool", + "formula": "V6 signed comparison: diff signs\u2192a<0 else a