fix: fisherMetric50 bridge uses Pi.single (standard basis) not tangentBasis

The old bridge claimed fisherMetric50 p i j = fisherMetric p (tangentBasis i 0)
(tangentBasis j 0), which is WRONG — tangentBasis has a 1/p_0 cross-term.

Correct bridge: fisherMetric p (Pi.single i 1) (Pi.single j 1) = fisherMetric50 p i j
This is trivially true: ∑_k (δ_ik * δ_jk)/p_k = δ_ij/p_i.

Also fixed:
- Import syntax error (missing -/ closure)
- Import path: library.ChentsovFinite → CoreFormalism.ChentsovFinite
- Added BindingSiteHachimoji to lakefile

Note: ChentsovFinite.lean has broken Mathlib imports (pre-existing).
The h_fisher_basis proof is verified correct in isolation.
This commit is contained in:
allaun 2026-06-23 15:15:42 -05:00
parent cfb07d1c62
commit fda0c30c2a
2 changed files with 24 additions and 21 deletions

View file

@ -11,12 +11,11 @@
- Giani, Win, Conti 2025 (PVGS): photon-varied Gaussian states
- Chentsov 1972: unique Fisher metric on probability simplex
- Research-Stack library/ChentsovFinite.lean: formal uniqueness proof
-/}
-/
import Mathlib.Data.Fin.Basic
import Mathlib.Probability.Distributions.Uniform
import Mathlib.LinearAlgebra.Matrix.PosDef
import library.ChentsovFinite
import Mathlib.Analysis.Convex.Simplex
import CoreFormalism.ChentsovFinite
namespace BindingSiteHachimoji
@ -175,26 +174,29 @@ theorem chentsov_50 (g : (p : AminoAcidDistribution) → Fin 50 → Fin 50 →
⟨p.val, ⟨h_pos p, p.property.1⟩⟩
-- ================================================================
-- Bridge Step 2: fisherMetric50 = fisherMetric on basis vectors
-- Bridge Step 2: fisherMetric50 = fisherMetric on standard basis
-- ================================================================
-- fisherMetric50 p i j = if i = j then 1/p.val i else 0
-- fisherMetric (toOpenSimplex p) (tangentBasis i 0) (tangentBasis j 0)
-- = ∑ k, tangentBasis i 0 k * tangentBasis j 0 k / p.val k
-- For i = j: ∑ k, (tangentBasis i 0 k)² / p.val k
-- = 1/p.val i + 1/p.val 0 (from the e_i - e_0 structure)
-- For i ≠ j: 1/p.val 0 (cross terms from e_0 component)
-- This is NOT the same as δ_ij / p_i — fisherMetric50 is the
-- DIAGONAL metric component, fisherMetric is the full bilinear form
-- on tangent vectors e_i - e_0.
-- fisherMetric p (Pi.single i 1) (Pi.single j 1)
-- = ∑ k, (δ_ik * δ_jk) / p.val k = δ_ij / p.val i
-- These are equal on STANDARD basis vectors e_i = Pi.single i 1.
-- Note: on TANGENT basis vectors (e_i - e_0), fisherMetric has an
-- extra 1/p_0 cross-term. The bridge uses standard basis instead.
have h_fisher_basis : ∀ (p : AminoAcidDistribution) (i j : Fin 50),
fisherMetric50 p i j =
fisherMetric (toOpenSimplex p) (tangentBasis i 0) (tangentBasis j 0) := by
fisherMetric (toOpenSimplex p) (Pi.single i 1) (Pi.single j 1) =
fisherMetric50 p i j := by
intro p i j
simp only [fisherMetric50, fisherMetric, tangentBasis]
sorry -- Bridge obligation: expand ∑ k, tangentBasis i 0 k * tangentBasis j 0 k / p.val k
-- and show it equals δ_ij / p.val i (modulo the e_0 tangent basis structure).
-- This requires careful case analysis on i = j vs i ≠ j and the
-- tangentBasis definition (e_i - e_0 has components at both i and 0).
simp only [fisherMetric50, fisherMetric]
by_cases hij : i = j
· subst hij
rw [Finset.sum_eq_single i]
· simp [Pi.single]
· intro b _ hbi; simp [Pi.single, Ne.symm hbi]
· simp
· rw [Finset.sum_eq_single i]
· simp [Pi.single, hij]
· intro b _ hbi; simp [Pi.single, Ne.symm hbi]
· simp
-- ================================================================
-- Bridge Step 3: Construct RiemannianMetric 50 from g

View file

@ -37,7 +37,8 @@ lean_lib «SilverSightFormal» where
`CoreFormalism.HachimojiManifoldAxiom,
`CoreFormalism.HachimojiCodec,
`CoreFormalism.HachimojiLUT,
`CoreFormalism.HachimojiBridging
`CoreFormalism.HachimojiBridging,
`BindingSite.BindingSiteHachimoji
]
lean_lib «SilverSightRRC» where