Order-3 BigRational jet AD (no symbolic algebra): Fisher–Rao + drift-flip
metric, Γ/R/∇R/R·R/Q(g,R) at rational points. Validated against the sympy
Δ₃ ground truth (exact match incl. (∇R)_(0,0,1,0,1)=1987584/1500625 and
the drift obstruction scalar). Signature via congruence elimination
(Sylvester's law of inertia) — fixes a row-aliasing bug that reported
(4,3) at the Δ₇ centroid; truth is (6,1), numpy-confirmed.
Δ₇ centroid results (31s single-core): baseline constant curvature 1/4
holds; g' signature (6,1) with drift time-like (g'(β,β)=−35); verdict
PROPER (11076/16807 nonzero ∇R, 591 inconsistent L ratios) — matches Δ₃.
survey subcommand = resumable DAG: one receipt JSON per lattice point
(skip-if-exists), rayon-parallel, --max-points deterministic stride cap;
receipts are ingestable scar-map events (obstruction ⇒ scar candidate).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Density now measured by information-theoretic bounds, not just counts:
Shannon entropy H = -Σ p(x) log₂ p(x) over equation symbol distribution
- Higher H = more informational diversity = denser content
- RG flow bound: H < ln(2⁸) ≈ 2.08 for 8-strand representation
Landauer cost E = N·kT·ln(2) where N = distinct math tokens
- Each distinct symbol requires erasing energy
- kT = 0.025 eV at 290K → ~0.017 eV per bit
Density levels:
THERMODYNAMIC_SATURATION: both Shannon + Landauer exceed bounds
SHANNON_SATURATED: entropy > rgflow fixed-point
LANDAUER_EXPENSIVE: energy cost too high
COUNT_EXCEEDED: simple count threshold
rust/src/bin/ingest.rs:
- Parses $\LaTeX$ equations from .md files (block 602556 and inline $)
- Classifies as spectral/braid/cartan/unknown via keyword detection
- Density check: pauses at >20 equations or >5 unknowns
- Computes spectral fingerprint (σ, τ, ∆, λ_min, λ_max) via character transform
- Emits receipt.json with full results
- Writes .decision.md for user review when too dense
Rust CLI, zero-float spectral computation, serde JSON output.
Cargo.toml: added regex + serde dependencies.
Rust fixes:
- Remove Q0_16 Not arm (was silently returning Bool(false) instead of type error)
- Replace inline floor division with floor_div() calls in MulSatQ16/DivSatQ16
- Fix comment ranges for Q0_16 [-32767, 32767] and Q16_16 [-2147483647, 2147483647]
Go fixes:
- Add euclideanDiv() matching Lean Int.ediv (remainder ≥ 0)
- Use euclideanDiv for MulSatQ16 and DivSatQ16
- Change Locals from []*Val to []Val (dangling pointer fix)
- Step on halted state returns &s, nil (Lean returns Ok s)
- OOB PC returns error instead of silent halt
- Halt does not increment PC (Lean: PC unchanged)
All Go tests pass (9/9)
Fixes applied to Rust, Julia, and R AVM ISA ports:
1. Division rounding: use floor division (matching Lean Int.ediv)
2. Clamp range: symmetric [-2147483647, 2147483647] for Q16_16,
[-32767, 32767] for Q0_16 (preserves negation involution)
3. V6 sign-decomposition comparison for ltQ16
4. Stack depth limit: maxStackDepth = 1024 with StackOverflow error
5. Added AVM-specific constants and helpers to each port
All three ports now match the Lean reference specification.