Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Free group factors: supporting development, part 17

Definition
FreeGroupFactorProof17

by wurtle · Nov 4, 2026 · Mathlib 0df444a (Lean v4.33.1)

free-group-factorsoai-math

Part 17 of the supporting Lean development for the isomorphism of all interpolated free group factors. It contains the definitions (operators on free Fock spaces, Gaussian systems, weighted corner models, stabilization and amplification constructions, and the free-group word maps) that the statements of the published child theorems and of the main theorem's proof refer to, in source order, together with the proved lemmas their bodies rely on. No result is assumed.

Formalization Note Definitions of this development carry proof fields and Classical.choose terms, so their dependencies must be proved here rather than imported from theorems. The code is OpenAI's, carved from lean/OAI/Analysis/FreeGroupFactor and lean/OAI/Analysis/InterpolatedFactors in openai/math at adc7f12 and ported to Lean 4.33.1 and Mathlib 0df444a.

Definition code
import Mathlib
import Definitions.Def_FreeGroupFactorProof16

set_option linter.all false

section
namespace OAI

noncomputable section

namespace FreeGroupFactorMain

universe u_1 u_2 u_3 u_4 u_5 u_6 u_7 u_8 u_9 u_10 u_11 u_12
universe u_13 u_14 u_15 u_16 u_17 u_18 u_19 u_20 u_21 u_22 u_23 u_24
universe u_25 u_26 u_27 u_28 u_29 u_30 u_31 u_32 u_33 u_34 u_35 u_36
universe u_37 u_38 u_39 u_40 u_41 u_42 u_43 u_44 u_45 u_46 u_47 u_48
universe u_49

open Filter Topology

namespace FreeFock
open Filter Topology
open scoped ENNReal
variable {α : Type u_6} [DecidableEq α]

end FreeFock
open MeasureTheory Set CompactlySupported
open scoped ENNReal
namespace CyclicSpectral
variable {H : Type u_7} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H]

variable (A : H →L[ℂ] H) (hA : IsSelfAdjoint A) (ξ : H)
end CyclicSpectral

open MeasureTheory ProbabilityTheory Filter Set Function
open scoped Topology ENNReal

namespace CyclicSpectral

section
open MeasureTheory
variable {H : Type u_19} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H]

variable (A : H →L[ℂ] H) (hA : IsSelfAdjoint A) (ξ : H)

end
section
open MeasureTheory Filter
variable {H : Type u_20} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H]

variable (A : H →L[ℂ] H) (hA : IsSelfAdjoint A) (ξ : H)

end
open MeasureTheory Filter
variable {H : Type u_21} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H]

variable (A : H →L[ℂ] H) (hA : IsSelfAdjoint A) (ξ : H)

end CyclicSpectral
namespace FreeFock

section
open MeasureTheory
variable {α : Type u_22} [DecidableEq α]

end
open MeasureTheory
variable {α : Type u_23} [DecidableEq α]

end FreeFock
open Filter Topology
open scoped ENNReal

namespace FreeFock

section
open Filter Topology Set MeasureTheory
variable {α : Type u_25} [DecidableEq α]

 theorem semicircular_mem_haar_bicommutant (i : α) :
    semicircular i ∈ StarSubalgebra.centralizer ℂ
      (StarSubalgebra.centralizer ℂ ({(CyclicSpectral.haarUnitary (semicircular i)
        (semicircular_selfAdjoint i) vacuum : Operator α)} : Set (Operator α)) : Set (Operator α)) := by
  let : Nontrivial (Fock α) := ⟨⟨vacuum,0,by
    intro h
    have he := congrArg (fun v : Fock α => v []) h
    simp [vacuum,lp.single_apply] at he⟩⟩
  have hb (n : ℕ) := CyclicSpectral.bounded_haar_approx (semicircular i)
    (semicircular_selfAdjoint i) vacuum (1/((n:ℝ)+1)) (by positivity)
  choose T hmem hnorm herr using hb
  have hS : semicircular i ∈ gaussianAlgebra α :=
    StarAlgebra.adjoin_le_centralizer_centralizer ℂ _ (StarAlgebra.subset_adjoin ℂ _ (Set.mem_range_self i))
  have hG : IsClosed (gaussianAlgebra α : Set (Operator α)) := by
    rw [gaussianAlgebra,StarSubalgebra.coe_centralizer]
    exact Set.isClosed_centralizer _
  have hT (n : ℕ) : T n ∈ gaussianAlgebra α :=
    StarAlgebra.elemental.le_of_mem hG (spectralHaar_mem i) (hmem n)
  have hv : Tendsto (fun n => T n vacuum) atTop (𝓝 (semicircular i vacuum)) := by
    have h := squeeze_zero_norm (fun n => (herr n).le)
      (tendsto_one_div_add_atTop_nhds_zero_nat (𝕜 := ℝ))
    have hh := h.add_const (semicircular i vacuum)
    simpa only [sub_add_cancel,zero_add] using hh
  have hstrong : ∀ ξ, Tendsto (fun n => T n ξ) atTop (𝓝 (semicircular i ξ)) := by
    apply lp_strong_limit_of_bounded_basis T (semicircular i) ‖semicircular i‖ hnorm
    intro w
    have he (D : Operator α) (hD : D ∈ gaussianAlgebra α) :
        D (lp.single 2 w 1)=rightWick w.reverse (D vacuum) := by
      have h := DFunLike.congr_fun (gaussian_commute_rightWick ⟨D,hD⟩ w.reverse) vacuum
      simpa only [mul_apply_eq_comp,rightWick_vacuum,List.reverse_reverse] using h.symm
    simpa only [he _ (hT _),he _ hS,Function.comp_def] using (rightWick w.reverse).continuous.continuousAt.tendsto.comp hv
  let B := StarSubalgebra.centralizer ℂ
      (StarSubalgebra.centralizer ℂ ({(CyclicSpectral.haarUnitary (semicircular i)
        (semicircular_selfAdjoint i) vacuum : Operator α)} : Set (Operator α)) : Set (Operator α))
  have hB : IsClosed (B : Set (Operator α)) := by
    dsimp [B]
    exact Set.isClosed_centralizer _
  have hU : (CyclicSpectral.haarUnitary (semicircular i) (semicircular_selfAdjoint i) vacuum : Operator α) ∈ B :=
    StarAlgebra.adjoin_le_centralizer_centralizer ℂ _ (StarAlgebra.subset_adjoin ℂ _ (Set.mem_singleton _))
  have hTB (n : ℕ) : T n ∈ B := StarAlgebra.elemental.le_of_mem hB hU (hmem n)
  rw [StarSubalgebra.mem_centralizer_iff]
  intro C hC
  have hl (D : Operator α) (hD : D ∈ StarSubalgebra.centralizer ℂ
      ({(CyclicSpectral.haarUnitary (semicircular i) (semicircular_selfAdjoint i) vacuum : Operator α)} : Set (Operator α))) :
      D*semicircular i=semicircular i*D := by
    apply ContinuousLinearMap.ext
    intro ξ
    have he n := congrArg (fun Q : Operator α => Q ξ)
      ((StarSubalgebra.mem_centralizer_iff ℂ).mp (hTB n) D hD).1
    exact tendsto_nhds_unique ((D.continuous.continuousAt.tendsto.comp (hstrong ξ)).congr
      (fun n => he n)) (hstrong (D ξ))
  exact ⟨hl C hC,hl (star C) (star_mem hC)⟩
end
section
open Set
variable {α : Type u_26} [DecidableEq α]

def spectralHaarOperator (i : α) : Operator α :=
  CyclicSpectral.haarUnitary (semicircular i) (semicircular_selfAdjoint i) vacuum

theorem haar_gaussian_commutant :
    StarSubalgebra.centralizer ℂ (Set.range (spectralHaarOperator : α → Operator α))=gaussianCommutant α := by
  ext C
  constructor
  · intro hC
    rw [gaussianCommutant,StarSubalgebra.mem_centralizer_iff]
    rintro _ ⟨i,rfl⟩
    have hi : C ∈ StarSubalgebra.centralizer ℂ ({spectralHaarOperator i} : Set (Operator α)) :=
      StarSubalgebra.centralizer_le ℂ _ _ (Set.singleton_subset_iff.mpr (Set.mem_range_self i)) hC
    have hh := ((StarSubalgebra.mem_centralizer_iff ℂ).mp (semicircular_mem_haar_bicommutant i) C hi).1
    exact ⟨hh.symm,by rw [(semicircular_selfAdjoint i).star_eq]; exact hh.symm⟩
  · intro hC
    rw [StarSubalgebra.mem_centralizer_iff]
    rintro _ ⟨i,rfl⟩
    have hi : spectralHaarOperator i ∈ gaussianAlgebra α := spectralHaar_mem i
    exact ⟨((StarSubalgebra.mem_centralizer_iff ℂ).mp hi C hC).1.symm,
      ((StarSubalgebra.mem_centralizer_iff ℂ).mp (show star (spectralHaarOperator i) ∈ gaussianAlgebra α from star_mem hi) C hC).1.symm⟩

theorem haar_generated_gaussian :
    StarSubalgebra.centralizer ℂ
      (StarSubalgebra.centralizer ℂ (Set.range (spectralHaarOperator : α → Operator α)) : Set (Operator α))=
    gaussianAlgebra α := by
  rw [haar_gaussian_commutant]
  rfl
end

section
open Filter Topology
open scoped ENNReal
variable {α : Type u_28} [DecidableEq α]

 theorem spectralHaar_cyclic_total :
    (algebraCyclic (StarAlgebra.adjoin ℂ (Set.range (spectralHaarOperator : α → Operator α)))
      vacuum).topologicalClosure=⊤ := by
  let A := StarAlgebra.adjoin ℂ (Set.range (spectralHaarOperator : α → Operator α))
  let K := (algebraCyclic A vacuum).topologicalClosure
  have hδ (w : List α) : lp.single 2 w (1:ℂ) ∈ K := by
    have hw : wick w ∈ gaussianAlgebra α := wick_mem_any _
      (fun i => StarAlgebra.adjoin_le_centralizer_centralizer ℂ _
        (StarAlgebra.subset_adjoin ℂ _ (Set.mem_range_self i))) w
    rw [← haar_generated_gaussian] at hw
    have hh := bicommutant_vector_mem_cyclic (Set.range (spectralHaarOperator : α → Operator α))
      vacuum (wick w) hw
    simpa only [wick_vacuum] using hh
  apply top_unique
  intro ξ _
  apply (algebraCyclic A vacuum).isClosed_topologicalClosure.mem_of_tendsto
    (lp.hasSum_single (by norm_num : (2:ℝ≥0∞)≠⊤) ξ)
  filter_upwards [] with s
  apply K.sum_mem
  intro w _
  have he : lp.single (E := fun _ : List α => ℂ) 2 w (ξ w)=(ξ w) • lp.single 2 w 1 := by
    ext v
    simp [lp.single_apply,Pi.single_apply]
  rw [he]
  exact K.smul_mem _ (hδ w)

end
section
open scoped ComplexConjugate
variable {α : Type u_29} [DecidableEq α]

 theorem vacuumTrace_star (T : Operator α) : vacuumTrace (star T)=conj (vacuumTrace T) := by
  unfold vacuumTrace
  rw [ContinuousLinearMap.star_eq_adjoint,ContinuousLinearMap.adjoint_inner_right]
  exact (inner_conj_symm (𝕜 := ℂ) (T vacuum) vacuum).symm

 theorem spectralHaar_integer_moment (i : α) (k : ℤ) :
    vacuumTrace (((spectralHaar i ^ k : unitary (gaussianAlgebra α)) : gaussianAlgebra α) : Operator α)=
      if k=0 then 1 else 0 := by
  cases k with
  | ofNat n =>
    simpa using spectralHaar_moment i n
  | negSucc n =>
    rw [ite_eq_right (Int.negSucc_ne_zero n),zpow_negSucc,← Unitary.star_eq_inv]
    change vacuumTrace (star ((((spectralHaar i : gaussianAlgebra α) : Operator α)^(n+1))))=0
    rw [vacuumTrace_star,spectralHaar_moment]
    simp

end
section
variable {α : Type u_30} [DecidableEq α]

 theorem wick_replicate_boundary (i j : α) (hij : i≠j) (w : List α) (n : ℕ) :
    wick (List.replicate n i)*wick (j::w)=wick (List.replicate n i++j::w) := by
  suffices ∀ n, (wick (List.replicate n i)*wick (j::w)=wick (List.replicate n i++j::w)) ∧
      (wick (List.replicate (n+1) i)*wick (j::w)=wick (List.replicate (n+1) i++j::w)) from (this n).1
  intro n
  induction n with
  | zero =>
    constructor
    · simp
    · simp only [Nat.zero_add,List.replicate_one,List.cons_append,List.nil_append]
      rw [wick_semicircular_cons i [],wick_nil,mul_one,sub_zero,
        wick_semicircular_cons i (j::w)]
      simp only [hij,ite_false,sub_zero]
  | succ n ih =>
    refine ⟨ih.2,?_⟩
    have hleft : wick (List.replicate (n+1+1) i)=
        semicircular i*wick (List.replicate (n+1) i)-wick (List.replicate n i) := by
      conv_lhs => rw [List.replicate_succ,wick_semicircular_cons]
      simp only [List.replicate_succ,ite_true]
    have hright : wick (List.replicate (n+1+1) i++j::w)=
        semicircular i*wick (List.replicate (n+1) i++j::w)-wick (List.replicate n i++j::w) := by
      conv_lhs => rw [List.replicate_succ,List.cons_append,wick_semicircular_cons]
      simp only [List.replicate_succ,List.cons_append,ite_true]
    rw [hleft,sub_mul,mul_assoc,ih.1,ih.2,hright]
end
variable {α : Type u_31} [DecidableEq α]

def blockLetters (L : List (α × ℕ)) : List α :=
  L.flatMap (fun p => List.replicate p.2 p.1)

def blockProduct : List (α × ℕ) → Operator α
  | [] => 1
  | (i,n)::L => wick (List.replicate n i)*blockProduct L

def blocksReduced : List (α × ℕ) → Prop
  | [] => True
  | (i,n)::L => 0 < n ∧ blocksReduced L ∧
    match L with | [] => True | (j,_)::_ => i≠j

 theorem wick_blocks_concatenate (L : List (α × ℕ)) (hL : blocksReduced L) :
    blockProduct L=wick (blockLetters L) := by
  induction L with
  | nil => simp [blockProduct,blockLetters]
  | cons p L ih =>
    rcases p with ⟨i,n⟩
    obtain ⟨hn,hL,hsep⟩ := hL
    cases L with
    | nil => simp [blockProduct,blockLetters]
    | cons q L =>
      rcases q with ⟨j,m⟩
      have hm : 0 < m := hL.1
      obtain ⟨k,rfl⟩ := Nat.exists_eq_succ_of_ne_zero (Nat.ne_of_gt hm)
      rw [blockProduct,ih hL]
      change wick (List.replicate n i)*wick ((List.replicate (k+1) j)++blockLetters L)=
        wick (List.replicate n i++(List.replicate (k+1) j++blockLetters L))
      simpa only [List.replicate_succ,List.cons_append] using
        wick_replicate_boundary i j hsep (List.replicate k j++blockLetters L) n

 omit [DecidableEq α] in
 theorem blockLetters_nonempty {L : List (α × ℕ)} (hL : blocksReduced L) (h : L≠[]) :
    blockLetters L≠[] := by
  cases L with
  | nil => exact False.elim (h rfl)
  | cons p L =>
    rcases p with ⟨i,n⟩
    have hn : 0 < n := hL.1
    obtain ⟨k,rfl⟩ := Nat.exists_eq_succ_of_ne_zero (Nat.ne_of_gt hn)
    simp [blockLetters,List.replicate_succ]

 theorem wick_blocks_centered_moment (L : List (α × ℕ)) (hL : blocksReduced L) (h : L≠[]) :
    vacuumTrace (blockProduct L)=0 := by
  rw [wick_blocks_concatenate L hL]
  have hne := blockLetters_nonempty hL h
  unfold vacuumTrace
  rw [wick_vacuum]
  simp [vacuum,lp.inner_single_left,lp.single_apply,hne]
end FreeFock
section

variable {A : Type u_32} [NormedRing A] [NormedAlgebra ℂ A]

theorem mul_mem_closed_span_image2 (s t : Set A) (x y : A)
    (hx : x∈(Submodule.span ℂ s).topologicalClosure)
    (hy : y∈(Submodule.span ℂ t).topologicalClosure) :
    x*y∈(Submodule.span ℂ (Set.image2 (·*·) s t)).topologicalClosure := by
  let K := (Submodule.span ℂ (Set.image2 (·*·) s t)).topologicalClosure
  have hbase (b : A) (hb : b∈t) : x*b∈K := by
    have hc : IsClosed {a : A | a*b∈K} :=
      (Submodule.isClosed_topologicalClosure _).preimage (continuous_id.mul continuous_const)
    apply closure_minimal (t := {a : A | a*b∈K}) ?_ hc hx
    intro a ha
    induction ha using Submodule.span_induction with
    | mem a ha =>
      exact Submodule.le_topologicalClosure _
        (Submodule.subset_span ⟨a,ha,b,hb,rfl⟩)
    | zero => simp
    | add a c _ _ ha hc => simpa only [Set.mem_ofPred_eq,add_mul] using K.add_mem ha hc
    | smul z a _ ha => simpa only [Set.mem_ofPred_eq,smul_mul_assoc] using K.smul_mem z ha
  have hc : IsClosed {b : A | x*b∈K} :=
    (Submodule.isClosed_topologicalClosure _).preimage (continuous_const.mul continuous_id)
  apply closure_minimal (t := {b : A | x*b∈K}) ?_ hc hy
  intro b hb
  induction hb using Submodule.span_induction with
  | mem b hb => exact hbase b hb
  | zero => simp
  | add b c _ _ hb hc => simpa only [Set.mem_ofPred_eq,mul_add] using K.add_mem hb hc
  | smul z b _ hb => simpa only [Set.mem_ofPred_eq,mul_smul_comm] using K.smul_mem z hb

end
namespace FreeFock

section
variable {α : Type u_33} [DecidableEq α]

 theorem center_run_mem (i : α) (x : Operator α) (hx : x∈runSpan i) :
    x-vacuumTrace x • 1∈positiveRunSpan i := by
  induction hx using Submodule.span_induction with
  | mem x hx =>
    obtain ⟨n,rfl⟩ := hx
    cases n with
    | zero => simp [vacuumTrace_one]
    | succ n =>
      rw [vacuumTrace_run,ite_eq_right (Nat.succ_ne_zero n),zero_smul ℂ (A := Operator α),sub_zero]
      exact Submodule.subset_span (Set.mem_range_self n)
  | zero => simpa only [vacuumTrace_linear.map_zero,zero_smul ℂ (A := Operator α),sub_self] using (positiveRunSpan i).zero_mem
  | add x y _ _ hx hy =>
    rw [vacuumTrace_linear.map_add,add_smul (R := ℂ) (M := Operator α),add_sub_add_comm]
    exact (positiveRunSpan i).add_mem hx hy
  | smul c x _ hx =>
    rw [vacuumTrace_linear.map_smul,smul_eq_mul,← smul_smul,← smul_sub]
    exact (positiveRunSpan i).smul_mem c hx

 theorem center_run_closure (i : α) (x : Operator α)
    (hx : x∈(runSpan i).topologicalClosure) :
    x-vacuumTrace x • 1∈(positiveRunSpan i).topologicalClosure := by
  have hc : Continuous (fun x : Operator α => x-vacuumTrace x • 1) :=
    continuous_id.sub (vacuumTrace_continuous.smul continuous_const)
  apply closure_minimal (t := {x | x-vacuumTrace x • 1∈(positiveRunSpan i).topologicalClosure}) ?_ ?_ hx
  · intro a ha
    exact (positiveRunSpan i).le_topologicalClosure (center_run_mem i a ha)
  · exact (positiveRunSpan i).isClosed_topologicalClosure.preimage hc

 theorem spectralHaar_run_closure (i : α) :
    spectralHaarOperator i ∈ (runSpan i).topologicalClosure := by
  change spectralHaarOperator i ∈ (runAlgebra i).topologicalClosure
  apply CyclicSpectral.complexHom_mem
  · exact StarSubalgebra.isClosed_topologicalClosure _
  · apply StarSubalgebra.le_topologicalClosure
    change semicircular i∈runSpan i
    simpa [wick_semicircular_cons] using run_mem i 1

 theorem spectralHaar_power_positive_run_closure (i : α) (k : ℤ) (hk : k≠0) :
    ((((spectralHaar i)^k : unitary (gaussianAlgebra α)) : gaussianAlgebra α) : Operator α) ∈
      (positiveRunSpan i).topologicalClosure := by
  have hrun : ((((spectralHaar i)^k : unitary (gaussianAlgebra α)) : gaussianAlgebra α) : Operator α) ∈
      (runSpan i).topologicalClosure := by
    change ((↑((spectralHaar i)^k) : gaussianAlgebra α) : Operator α) ∈
      (runAlgebra i).topologicalClosure
    have hh : spectralHaarOperator i∈(runAlgebra i).topologicalClosure := spectralHaar_run_closure i
    cases k with
    | ofNat n =>
      rw [Int.ofNat_eq_natCast,zpow_natCast]
      change spectralHaarOperator i^n ∈ (runAlgebra i).topologicalClosure
      exact pow_mem hh n
    | negSucc n =>
      rw [zpow_negSucc,← Unitary.star_eq_inv]
      change star (spectralHaarOperator i^(n+1))∈(runAlgebra i).topologicalClosure
      exact star_mem (pow_mem hh (n+1))
  have hc := center_run_closure i _ hrun
  rw [spectralHaar_integer_moment,ite_eq_right hk,zero_smul ℂ (A := Operator α),sub_zero] at hc
  exact hc

end
variable {α : Type u_34} [DecidableEq α]

def colorsReduced : List α → Prop
  | [] => True
  | i::L => colorsReduced L ∧ (match L with | [] => True | j::_ => i≠j)

def runProducts : List α → Set (Operator α)
  | [] => {1}
  | i::L => Set.image2 (·*·) (Set.range (fun n : ℕ => wick (List.replicate (n+1) i))) (runProducts L)

 theorem runProducts_blocks (L : List α) (X : Operator α) (hX : X∈runProducts L) :
    ∃ K : List (α×ℕ), K.map Prod.fst=L ∧ (∀ p∈K,0<p.2) ∧ X=blockProduct K := by
  induction L generalizing X with
  | nil => exact ⟨[],rfl,by simp,by simpa [runProducts,blockProduct] using hX⟩
  | cons i L ih =>
    obtain ⟨a,⟨n,rfl⟩,b,hb,rfl⟩ := hX
    obtain ⟨K,hK,hpos,rfl⟩ := ih b hb
    refine ⟨(i,n+1)::K,by simp [hK],?_,rfl⟩
    intro p hp
    rcases List.mem_cons.mp hp with rfl | hp
    · exact Nat.succ_pos n
    · exact hpos p hp

 omit [DecidableEq α] in
 theorem blocksReduced_of_colors (K : List (α×ℕ))
    (h : colorsReduced (K.map Prod.fst)) (hpos : ∀ p∈K,0<p.2) : blocksReduced K := by
  induction K with
  | nil => trivial
  | cons p K ih =>
    rcases p with ⟨i,n⟩
    refine ⟨hpos (i,n) (by simp),ih h.1 (fun p hp => hpos p (by simp [hp])),?_⟩
    cases K with
    | nil => trivial
    | cons q K => exact h.2

 theorem runProducts_trace_zero (L : List α) (h : colorsReduced L) (hne : L≠[])
    (X : Operator α) (hX : X∈runProducts L) : vacuumTrace X=0 := by
  obtain ⟨K,hK,hpos,rfl⟩ := runProducts_blocks L X hX
  apply wick_blocks_centered_moment
  · apply blocksReduced_of_colors K
    · simpa only [hK] using h
    · exact hpos
  · intro he
    apply hne
    simpa only [he,List.map_nil] using hK.symm

 theorem vacuumTrace_span_zero (S : Set (Operator α)) (hS : ∀ X∈S,vacuumTrace X=0)
    (X : Operator α) (hX : X∈(Submodule.span ℂ S).topologicalClosure) : vacuumTrace X=0 := by
  apply closure_minimal (t := {X : Operator α | vacuumTrace X=0}) ?_
    (isClosed_eq vacuumTrace_continuous continuous_const) hX
  intro X hX
  induction hX using Submodule.span_induction with
  | mem X hX => exact hS X hX
  | zero => exact vacuumTrace_linear.map_zero
  | add X Y _ _ hX hY =>
    change vacuumTrace X=0 at hX
    change vacuumTrace Y=0 at hY
    simp only [Set.mem_ofPred_eq,vacuumTrace_linear.map_add,hX,hY,add_zero]
  | smul c X _ hX =>
    change vacuumTrace X=0 at hX
    simp only [Set.mem_ofPred_eq,vacuumTrace_linear.map_smul,hX,smul_zero]

def haarProduct : List (α×ℤ) → Operator α
  | [] => 1
  | (i,k)::L => (((spectralHaar i ^ k : unitary (gaussianAlgebra α)) : gaussianAlgebra α) : Operator α)*haarProduct L

 theorem haarProduct_mem_runProducts (L : List (α×ℤ)) (hL : ∀ p∈L,p.2≠0) :
    haarProduct L∈(Submodule.span ℂ (runProducts (L.map Prod.fst))).topologicalClosure := by
  induction L with
  | nil =>
    exact Submodule.le_topologicalClosure _ (Submodule.subset_span (by simp [runProducts,haarProduct]))
  | cons p L ih =>
    rcases p with ⟨i,k⟩
    exact mul_mem_closed_span_image2 _ _ _ _
      (spectralHaar_power_positive_run_closure i k (hL (i,k) (by simp)))
      (ih (fun p hp => hL p (by simp [hp])))

 theorem spectralHaar_mixed_moment (L : List (α×ℤ))
    (hL : ∀ p∈L,p.2≠0) (hred : colorsReduced (L.map Prod.fst)) (hne : L≠[]) :
    vacuumTrace (haarProduct L)=0 := by
  apply vacuumTrace_span_zero (runProducts (L.map Prod.fst))
  · exact runProducts_trace_zero _ hred (by simpa using hne)
  · exact haarProduct_mem_runProducts L hL

end FreeFock

section
variable {α : Type u_35}

def adjacentDistinct : List α → Prop
  | [] => True
  | i::L => adjacentDistinct L ∧ (match L with | [] => True | j::_ => i≠j)

def expandSignedRuns (R : List ((α×Bool)×ℕ)) : List (α×Bool) :=
  R.flatMap (fun p => List.replicate p.2 p.1)

theorem reduced_signed_runs (L : List (α×Bool)) (hL : FreeGroup.IsReduced L) :
    ∃ R : List ((α×Bool)×ℕ), L=expandSignedRuns R ∧
      (∀ p∈R,0<p.2) ∧ adjacentDistinct (R.map (fun p => p.1.1)) := by
  classical
  induction L with
  | nil => exact ⟨[],rfl,by simp,by trivial⟩
  | cons x L ih =>
    have ht : FreeGroup.IsReduced L := hL.tail
    obtain ⟨R,hR,hpos,hred⟩ := ih ht
    rcases x with ⟨i,b⟩
    cases R with
    | nil =>
      have hnil : L=[] := hR
      subst L
      exact ⟨[((i,b),1)],by simp [expandSignedRuns],by simp,by trivial⟩
    | cons p R =>
      rcases p with ⟨⟨j,c⟩,m⟩
      have hm := hpos ((j,c),m) (by simp)
      obtain ⟨n,rfl⟩ := Nat.exists_eq_succ_of_ne_zero (Nat.ne_of_gt hm)
      have he : L=(j,c)::(List.replicate n (j,c)++expandSignedRuns R) := by
        simpa [expandSignedRuns,List.replicate_succ] using hR
      by_cases hij : i=j
      · subst j
        have hpair : FreeGroup.IsReduced ((i,b)::(i,c)::(List.replicate n (i,c)++expandSignedRuns R)) := by
          simpa only [he] using hL
        have hbc : b=c := (FreeGroup.isReduced_cons_cons.mp hpair).1 rfl
        subst c
        refine ⟨((i,b),n+2)::R,?_,?_,hred⟩
        · simp only [expandSignedRuns,List.flatMap_cons,List.replicate_succ,List.cons_append,he]
        · intro p hp
          rcases List.mem_cons.mp hp with rfl | hp
          · omega
          · exact hpos p (List.mem_cons_of_mem _ hp)
      · refine ⟨((i,b),1)::((j,c),n+1)::R,?_,?_,?_⟩
        · simpa [expandSignedRuns] using congrArg (List.cons (i,b)) hR
        · intro p hp
          rcases List.mem_cons.mp hp with rfl | hp
          · exact Nat.zero_lt_one
          · exact hpos p hp
        · exact ⟨hred,hij⟩

end
section
variable {α : Type u_36} {G : Type u_37} [Group G]

def signedExponent (b : Bool) (n : ℕ) : ℤ := bif b then (n : ℤ) else -(n : ℤ)

theorem signedExponent_ne_zero (b : Bool) (n : ℕ) (hn : 0<n) : signedExponent b n≠0 := by
  cases b <;> simp [signedExponent,ne_of_gt hn]

theorem signedPower (b : Bool) (n : ℕ) (x : G) :
    x^signedExponent b n = (bif b then x else x⁻¹)^n := by
  cases b <;> simp [signedExponent]

def signedRunBlocks (R : List ((α×Bool)×ℕ)) : List (α×ℤ) :=
  R.map (fun p => (p.1.1,signedExponent p.1.2 p.2))

theorem lift_expandSignedRuns (f : α→G) (R : List ((α×Bool)×ℕ)) :
    FreeGroup.lift f (FreeGroup.mk (expandSignedRuns R))=
      ((signedRunBlocks R).map (fun p => f p.1^p.2)).prod := by
  rw [FreeGroup.lift_mk]
  induction R with
  | nil => rfl
  | cons p R ih =>
    rcases p with ⟨⟨i,b⟩,n⟩
    simpa only [expandSignedRuns,List.flatMap_cons,List.map_append,List.prod_append,
      List.map_replicate,List.prod_replicate,signedRunBlocks,List.map_cons,List.prod_cons,
      signedPower] using congrArg (fun x : G => (bif b then f i else (f i)⁻¹)^n*x) ih

end
namespace FreeFock
variable {α : Type u_38} [DecidableEq α]

def haarRepresentation : FreeGroup α →* unitary (gaussianAlgebra α) :=
  FreeGroup.lift spectralHaar

end FreeFock

namespace CyclicUnitary
open scoped ENNReal
variable {G : Type u_42} {E : Type u_43} [Group G] [DecidableEq G]
variable [NormedAddCommGroup E] [InnerProductSpace ℂ E] [CompleteSpace E]
variable (ρ : G →* (E →L[ℂ] E)) (hstar : ∀ g,star (ρ g)=ρ g⁻¹) (ξ : E)

end CyclicUnitary
namespace FreeFock
variable {α : Type u_44} [DecidableEq α]

end FreeFock

section

variable {A : Type u_45} {B : Type u_46} [Ring A] [Ring B] [Algebra ℂ A] [Algebra ℂ B]
  [StarRing A] [StarRing B] [StarModule ℂ A] [StarModule ℂ B]

end
open scoped ENNReal
variable {G : Type u_47} [Group G] [DecidableEq G]

namespace FreeFock
variable {α : Type u_48} [DecidableEq α]

end FreeFock

end FreeGroupFactorMain

end

end OAI
end
Source
OpenAI, An isomorphism of the free group factors, September 23, 2026, https://github.com/openai/math (paper: preprints/An-isomorphism-of-the-free-group-factors-September-23-2026/An-isomorphism-of-the-free-group-factors-September-23-2026.pdf; Lean: lean/OAI/Analysis/FreeGroupFactor and lean/OAI/Analysis/InterpolatedFactors, Apache License 2.0)

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me