Squash the four overlapping feature branches into a single change set against
main, eliminating cross-PR merge conflicts and the duplicated CI-fix scripts.
What this brings in (merge order #79 -> #80 -> #81 -> #89):
- #79 refactor(infra): shared utilities (4-Infrastructure/lib/*: q16, hashing,
jsonl, fraction_utils) + the scripts/math-first/* validators that the
math-check CI requires.
- #80 feat(lean): Semantics.E8Sidon (1025 lines) -- Eisenstein coefficient
identity E4^2 = E8 and the Sidon framework. E4_sq_eq_E8_coeff is fully proved
(all Fourier-coefficient extraction machine-checked); the single residual gap
is pinned to E4_sq_eq_E8_qExpansion (Mathlib lacks the valence formula /
dim M8 = 1). 4 sorries + 1 axiom (e8_additive_completeness), all TODO(lean-port).
- #81 refactor(lean): Float-free FixedPoint core (integer-only sqrt/log2/expNeg).
E8Sidon.lean kept at #80's final 1025-line version (the #81 intermediate
438-line copy was overridden by merge order).
- #89 feat(lean): Semantics.RRC.PolyFactorIdentity -- short-sleeve polynomial
detection at the zerocopy limb boundary; now imports Semantics.E8Sidon for
sigma3/sigma7/convolutionLHS (single source of truth) instead of inlining them.
Conflict resolution:
- flake.nix -> canonical rs-surface removal (Garnix shutdown).
- scripts/math-first/* -> byte-identical across branches, clean.
- .cursorrules / AGENTS.md -> unified; baselines + sorry inventory refreshed.
Verification:
- lake build (default aggregator): 3573 jobs, 0 errors.
- lake build Semantics.RRC.PolyFactorIdentity (E8Sidon + FixedPoint + PolyFactor):
3655 jobs, 0 errors. Witnesses verified (sigma7 4 = 16513, convolutionLHS 6 = 2350).
- Python tests: 68/68 pass.
Note: the "Workers Builds: researchstack" check is a preexisting external
Cloudflare build unrelated to this change (no branch touches 4-Infrastructure/cloudflare/).
Build: 3573 jobs (default), 3655 jobs (narrow), 0 errors
Co-Authored-By: Allaun Silverfox <bigdataiscoming+9i37y6j2@protonmail.com>
- Define TranslationResistance, TransportMetric, and TransportSpace
- Formalize Randers metric F = alpha + beta with Riemannian base and Lyapunov drift
- Connect to PIST via pistMass as transport cost functional
- Define IntelligenceDensity T = C/tau as system capability metric
- Provide executable witnesses for all definitions
- Follow AGENTS.md naming conventions and Q16_16 arithmetic
Build: 3561 jobs, 0 errors (lake build)
Per AGENTS.md: Lean is the source of truth. All computational gates have #eval witnesses.
- Define TranslationResistance, TransportMetric, and TransportSpace
- Formalize Randers metric F = alpha + beta with Riemannian base and Lyapunov drift
- Connect to PIST via pistMass as transport cost functional
- Define IntelligenceDensity T = C/tau as system capability metric
- Provide executable witnesses for all definitions
- Follow AGENTS.md naming conventions and Q16_16 arithmetic
Build: 3561 jobs, 0 errors (lake build)
Per AGENTS.md: Lean is the source of truth. All computational gates have #eval witnesses.
- BraidDiatCodec.lean: BraidDiatFrame now handles encode/decode of full
SpherionState × BraidReceipt with 256-bit header and variable mountain list
- braid_diat_codec.py: Python extraction updated to match, benchmark artifact
at shared-data/artifacts/braid_diat_codec_benchmark.json (714B avg vs
messagepack 1748B avg)
Build: lake build Compiler 3313 jobs, 0 errors
Implements Householder reflections for QR factorization:
- Q16Vec/Q16Mat: fixed-dimension vectors/matrices in Q16_16
- HouseholderReflection: H = I - 2vv^T/(v^T v)
- householderVector: compute reflection from column
- applyReflection: Hx = x - 2(v·x)/(v·v) * v
- qrFactorize: QR via Householder reflections
- incrementalUpdate: add column and update QR (streaming)
- quantize/quantizeVec: deterministic quantization for hashing
- O_AMMR_QRNode: QR state + basis size + hash
Key properties:
- All Q16_16 fixed-point (no Float)
- Deterministic quantization for hashing
- Incremental update for streaming spike trains
- Basis size control (rank control)
1 sorry: n > 0 precondition for householderVector
lake build: 3302 jobs, 0 errors
- IntNodeToPhaseVec_add: case analysis on all 9 coordinate-length combos
- braidCross_merge_correspondence: linear via PhaseVec.add + IntNode.add
- k_spike_step_count: structural induction on spike list
- receipt_correspondence: 6-D BraidReceipt ↔ SpherionState field mapping
- receipt_encode_stable: eigensolid encodeReceipt stability (step_count +1 only)
lake build: 3560 jobs, 0 errors
Implements the copy-if pattern as a Lean tactic:
- 'copy_if' tries rfl → decide → omega → norm_num → simp in order
- 'copy_if?' reports which closer worked (for profiling)
- Each closer is a 'zero delta' check — if goal is in normal form,
closes instantly; if not, tries next closer
This is the Lean-native equivalent of:
- Blog post: vpcompressd register-dest = 40x faster
- VCN: numpy copy-if = 3.3x faster
- Pre-filter: skip trivial theorems = 2.7x faster
- LSP: copy_if tactic = instant close for zero-delta goals
Usage:
import Semantics.CopyIfTactic
theorem foo : 1 = 1 := by copy_if
theorem bar : x + 0 = x := by copy_if
theorem baz : complex := by copy_if -- falls through to simp
3298 jobs, 0 errors. Tests pass for rfl, decide, omega, norm_num.
PrimEntry: exact rational arithmetic (num/den, no truncation).
All intermediate steps stay in ℤ. Single final division by det(A).
Key insight: A × adj(A) = det(A) × I is exact over ℤ.
Q16_16 version has 1-LSB error per entry (demonstrated by #eval).
Witnesses:
Primitive: 1/3 + 1/6 = 32768 (exact 0.5)
Q16_16: div(1,3) + div(1,6) = 32767 (1 LSB error)
Restored det_self_inverse theorem (removed by subagent).
lake build: 3301 jobs, 0 errors
HyperbolicStateSurface.lean:
- ko_preserves_hyperbola_approx: added TODO(lean-port) with proof sketch
- Requires sqrt squaring bound lemma for Q16_16
AdjugateMatrix.lean:
- det_self_inverse_approx: bounded-error variant (m×inv ≈ I within ε)
- det_self_inverse_exact: exact variant with division/multiplication preconditions
- Both have TODO(lean-port) with full proof sketches
lake build: 3571 jobs, 0 errors
Restructured the det_self_inverse theorem in AdjugateMatrix.lean into det_self_inverse_approx and det_self_inverse_exact to account for fixed-point division/multiplication truncation errors. Proved the updated build in Semantics.
Build: 3571 jobs, 0 errors (lake build)
The exact det_self_inverse theorem is NOT provable over saturating Q16_16
due to integer truncation in div/mul. Documented with concrete counterexample
(diag(3,1,...,1) gives 1 LSB error).
Proven base case: det_self_inverse_identity (identity matrix, native_decide).
The exact version requires either:
(a) Bounded-error variant (each entry within 1 LSB of I)
(b) Precondition: det divides all cofactor products exactly
(c) Proof over ℚ via Mathlib matrix library
Resolve issue where build_sparkle_tangnano9k.sh failed to locate nextpnr-himbaechel by checking the system PATH when local folder tools/ is empty.
Build: 3571 jobs, 0 errors (lake build)
Synthesized and placed-and-routed the UART beacon design on Tang Nano 9K with physical reset bypassed (rst_n_internal = 1'b1). Programmed the SRAM using openFPGALoader (CRC check: Success). Verified the physical UART blockage due to BL702 bridge firmware limitations via local probe, confirming the virtual serial route (virtual://q16-pty) as the active verification path. Updated scoped AGENTS.md files with the latest hardware status and Lean build baselines.
Build: 3313 jobs, 0 errors (lake build)
abs_triangle: reverted to admit. The q16Clamp applies Int.abs internally, making
sign analysis after division non-trivial. Attempted proofs using Int.sign,
Int.sign_mul_abs, Int.ediv_neg_pos_of_neg, Int.mul_ediv_le all failed (missing
theorems in this Mathlib version).
Key theorem: mul_mono_left and mul_mono_right are proved and working.
Build: 3313 jobs, 0 errors (lake build)
FixedPoint.lean:
- mul_mono_left: proved via Int.mul_le_mul_of_nonneg_right + Int.ediv_le_ediv
with explicit hpos : 0 < q16Scale proof (not synthesized by norm_num)
- mul_mono_right: proved via Int.mul_le_mul_of_nonneg_left + same pattern
- abs_triangle: reverted to admit — q16Clamp applies Int.abs internally making
sign analysis non-trivial; needs case split on sign of (a*b)/q16Scale
SSMS.lean:
- t2 (line 617): corrected first arg from cT i - cT j to Q16_16.abs (cT i - cT j)
to match available hcand hypothesis
- t1 (line 606-614): fixed admit in inner proof with proper h_diff_nonneg +
lt_of_ge_of_le chain using h_aciBound_nonneg
- AGENTS.md: updated status — mul_mono_left/right are proved, abs_triangle is the
critical remaining blocker for aciPreservedByMlgruStep
Build: 3313 jobs, 0 errors (lake build)
FixedPoint.lean: add stubs for abs_triangle, sub_eq_add_neg,
mul_mono_left/right, add_le_add, abs_nonneg, abs_mul_le.
All blocked by the same core issue: calc/rw/omega fail on
ofRawInt-projected Int arithmetic after unfold mul/add/abs/neg.
The pattern that works in PistSimulation (unfold + Int.ediv_le_ediv
+ ofRawInt_toInt_eq_clamp + q16Clamp_monotone) fails here
because the goal structures differ.
Known-working pattern to finalize:
1. unfold the Q16_16 op
2. have h2 := raw Int inequality (Int.mul_le_mul_of_nonneg_*)
3. have hdiv := Int.ediv_le_ediv (by norm_num) h2
4. rw [ofRawInt_toInt_eq_clamp, ofRawInt_toInt_eq_clamp]
5. exact q16Clamp_monotone _ _ hdiv
AGENTS.md: document 6 new TODO(lean-port) items in Pending Proof Work.
Build: 3313 jobs, 0 errors (lake build Compiler)
Body:
- ko_preserves_hyperbola_approx: document the new explicit premise
(onHyperbolaApprox (forwardStep s Δu) Q16_16.epsilon at line 69)
- aciPreservedByMlgruStep: document the new explicit premise (hBlendACI
at lines 545-548)
- both retain their TODO(lean-port) tags for the arithmetic lemmas
(sqrt error bound / triangle inequality + mul monotonicity)
Build: 3313 jobs, 0 errors (lake build Compiler)
Remove three active sorries by tightening the QFactor lawfulness gate and making the HyperbolicStateSurface and SSMS Q16_16 proof boundaries explicit premises instead of hidden obligations.
Build: 3571 jobs, 0 errors (lake build)
Adds three definitions/lemmas at module scope in FixedPoint.lean,
before the Q16_16 namespace:
q16Clamp (i : Int) : Int
— pure-Int clamp to [q16MinRaw, q16MaxRaw]; no subtype, no proof field.
q16Clamp_monotone (a b : Int) (h : a ≤ b) : q16Clamp a ≤ q16Clamp b
— proved once by the by_cases / simp / dsimp / omega pattern;
all future monotonicity proofs inherit from here.
q16Clamp_id_of_inRange (i : Int) (hlo hhi) : q16Clamp i = i
— idempotence on in-range values; one simp call.
Inside Q16_16 namespace, replaces the 38-line ofRawInt_monotone case-split
with two short lemmas:
ofRawInt_toInt_eq_clamp (i : Int) : (ofRawInt i).toInt = q16Clamp i
— bridge between the subtype constructor and the pure-Int function;
proved by split_ifs <;> rfl.
ofRawInt_monotone (a b : Int) (h : a ≤ b) :
(ofRawInt a).toInt ≤ (ofRawInt b).toInt
— now a two-line proof: simp [ofRawInt_toInt_eq_clamp] + q16Clamp_monotone.
add_nonneg_monotone is unchanged; it still delegates to ofRawInt_monotone.
Full workspace build: 3570 jobs, 0 errors.
Generated with [Devin](https://cli.devin.ai/docs)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
FixedPoint.lean — two new theorems:
ofRawInt_monotone (a b : Int) (h : a ≤ b) :
(ofRawInt a).toInt ≤ (ofRawInt b).toInt
— proved by explicit by_cases on all four guard combinations
(a/b each: above max, below min, in range), closing each branch
with simp + dsimp [q16MinRaw/q16MaxRaw] + omega/exact.
add_nonneg_monotone (a b : Q16_16) (hb : 0 ≤ b.toInt) :
a.toInt ≤ (add a b).toInt
— follows from ofRawInt_monotone + ofRawInt_toInt (one rewrite).
Semantics.PIST.Motif §6.2 — upgraded from concrete witness to general theorem:
motifScore_match_ge_base (x : MotifInputs) :
(motifScore {x with familyMatch := true}).toInt ≥
(motifScore {x with familyMatch := false}).toInt
— now proved for all MotifInputs using add_nonneg_monotone,
replacing the earlier TODO(lean-port) placeholder.
Full workspace build: 3570 jobs, 0 errors.
Generated with [Devin](https://cli.devin.ai/docs)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Adaptation, FAMM, MMRFAMMUnification: open statements were at module
scope before the namespace declaration. Moved each open to immediately
after the namespace line, inside the namespace body.
LandauerCompression already complied; not touched.
Generated with [Devin](https://cli.devin.ai/docs)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Replace terse -- TODO(lean-port): stubs with one-line descriptions
of the deferred proof/example work. No code changes; comments only.
Generated with [Devin](https://cli.devin.ai/docs)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Replace terse -- TODO(lean-port): stubs with one-line descriptions
of the deferred proof work. No code changes; comments only.
Generated with [Devin](https://cli.devin.ai/docs)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>