Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Free group factors: supporting development, part 2 of 12

Definition
FreeGroupFactorProof02

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

free-group-factorsoai-math

Part 2 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_FreeGroupFactorProof01

set_option linter.all false

section
namespace OAI

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

noncomputable section
namespace FreeGroupFactorMain.FreeFock
open scoped ENNReal

variable {α : Type u_2} {β : Type u_3} [DecidableEq α] [DecidableEq β]

end FreeGroupFactorMain.FreeFock
namespace FreeGroupFactorMain.CoordinateProjection

variable {α : Type u_6} [DecidableEq α]
open scoped Classical

end FreeGroupFactorMain.CoordinateProjection

namespace FreeGroupFactorMain.WeightedFock

section
open FreeFock
variable {ι : Type u_7} [DecidableEq ι]

end

section
open FreeFock
variable {ι : Type u_11} [DecidableEq ι]

end

section
open FreeFock
variable {ι : Type u_12}

variable [DecidableEq ι]

def vacuum (u v : ℝ) : H ι := (u:ℂ) • lp.single 2 ([],true) 1 +
  (v:ℂ) • lp.single 2 ([],false) 1

@[simp] theorem reverse_vacuum (u v : ℝ) : reverseOperator (vacuum u v : H ι)=vacuum u v := by
  simp only [vacuum,map_add,map_smul,reverseOperator_single,reverse_nil]

 theorem right_creation_commute (i j : ι) (r s : Bool) :
    Commute (creation i r) (rightCreation j s) := by
  change _*_=_*_
  apply operator_basis_ext
  intro w
  simp only [mul_apply_eq_comp,creation_single,rightCreation_single,appendPath]
  rfl

 theorem P_commute_rightCreation (i : ι) (r : Bool) :
    Commute (P : Operator ι) (rightCreation i r) := by
  apply CoordinateProjection.commute_embedding
  intro w
  change start (appendPath w i r)=true ↔ start w=true
  rw [start_appendPath]

 theorem rightP_commute_creation (i : ι) (r : Bool) :
    Commute (rightP : Operator ι) (creation i r) := by
  apply CoordinateProjection.commute_embedding
  intro w
  rfl

end

section
open FreeFock
variable {ι : Type u_13} [DecidableEq ι]

def vacuumMatrix (r s : Bool) : Operator ι :=
  InnerProductSpace.rankOne ℂ (lp.single 2 ([],s) 1) (lp.single 2 ([],r) 1)

@[simp] theorem vacuumMatrix_nil (r s e : Bool) (z : ℂ) :
    (vacuumMatrix r s : Operator ι) (lp.single 2 ([],e) z)=
      if r=e then lp.single 2 ([],s) z else 0 := by
  classical
  by_cases hr : r=e
  · subst e
    ext w
    simp [vacuumMatrix,InnerProductSpace.rankOne_apply,lp.inner_single_left,
      lp.single_apply,Pi.single_apply]
  · simp [vacuumMatrix,InnerProductSpace.rankOne_apply,lp.inner_single_left,
      lp.single_apply,hr]

@[simp] theorem vacuumMatrix_cons (r s e : Bool) (i : ι) (t : Bool)
    (w : List (ι×Bool)) (z : ℂ) :
    (vacuumMatrix r s : Operator ι) (lp.single 2 ((i,t)::w,e) z)=0 := by
  simp [vacuumMatrix,InnerProductSpace.rankOne_apply,lp.inner_single_left,lp.single_apply]

@[simp] theorem star_vacuumMatrix (r s : Bool) :
    star (vacuumMatrix r s : Operator ι)=vacuumMatrix s r := by
  simp only [vacuumMatrix,ContinuousLinearMap.star_eq_adjoint,InnerProductSpace.adjoint_rankOne]

 theorem annihilation_rightCreation (i j : ι) (r s : Bool) :
    star (creation i r)*rightCreation j s=
      rightCreation j s*star (creation i r)+(if i=j then vacuumMatrix r s else 0) := by
  apply operator_basis_ext
  rintro ⟨w,e⟩
  cases w with
  | nil =>
    simp only [mul_apply_eq_comp,add_apply,rightCreation_single,appendPath,List.nil_append,
      annihilation_single_cons,annihilation_single_nil,map_zero,zero_add]
    by_cases hij : i=j
    · subst j
      simp [vacuumMatrix_nil]
    · simp only [Prod.mk.injEq,hij,false_and,ite_false]
      rfl
  | cons a w =>
    rcases a with ⟨k,t⟩
    simp only [mul_apply_eq_comp,add_apply,rightCreation_single,appendPath,List.cons_append,
      annihilation_single_cons]
    have hm : (if i=j then (vacuumMatrix r s : Operator ι) else 0)
        (lp.single 2 ((k,t)::w,e) 1)=0 := by
      split_ifs <;> simp
    rw [hm,add_zero]
    by_cases h : (i,r)=(k,t)
    · simp only [h,ite_true,rightCreation_single,appendPath]
    · simp only [h,ite_false,map_zero]

def C (u v : ℝ) (i : ι) : Operator ι :=
  (u:ℂ) • creation i true+(v:ℂ) • creation i false

def rightC (u v : ℝ) (i : ι) : Operator ι :=
  (u:ℂ) • rightCreation i true+(v:ℂ) • rightCreation i false

theorem reverseConj_C (u v : ℝ) (i : ι) : reverseConj (C u v i)=rightC u v i := by
  simp only [C,rightC,map_add,map_smul,reverseConj_creation]

theorem S_eq (u v : ℝ) (i : ι) : S u v i=C u v i+star (C u v i) := rfl

def rightS (u v : ℝ) (i : ι) : Operator ι := rightC u v i+star (rightC u v i)

theorem reverseConj_S (u v : ℝ) (i : ι) : reverseConj (S u v i)=rightS u v i := by
  have hs : reverseConj (star (C u v i)) = star (reverseConj (C u v i)) :=
    reverseConj.map_star' (C u v i)
  simp only [S_eq,map_add,hs,reverseConj_C,rightS]

def vacuumCorrection (u v : ℝ) : Operator ι :=
  ((u:ℂ)^2) • vacuumMatrix true true +
  ((u:ℂ)*(v:ℂ)) • vacuumMatrix true false +
  ((u:ℂ)*(v:ℂ)) • vacuumMatrix false true +
  ((v:ℂ)^2) • vacuumMatrix false false

theorem vacuumCorrection_selfAdjoint (u v : ℝ) :
    IsSelfAdjoint (vacuumCorrection u v : Operator ι) := by
  change star (vacuumCorrection u v)=vacuumCorrection u v
  simp only [vacuumCorrection,star_add (R := Operator ι),star_smul,star_vacuumMatrix,Complex.star_def,
    map_pow,map_mul,Complex.conj_ofReal]
  abel

theorem C_commute_rightC (u v : ℝ) (i j : ι) : Commute (C u v i) (rightC u v j) := by
  unfold C rightC
  exact (((right_creation_commute i j true true).smul_left _).smul_right _ |>.add_right
    (((right_creation_commute i j true false).smul_left _).smul_right _)).add_left
      ((((right_creation_commute i j false true).smul_left _).smul_right _ |>.add_right
        (((right_creation_commute i j false false).smul_left _).smul_right _)))

theorem C_annihilation_rightC (u v : ℝ) (i j : ι) :
    star (C u v i)*rightC u v j=rightC u v j*star (C u v i)+
      (if i=j then vacuumCorrection u v else 0) := by
  simp only [C,rightC,star_add (R := Operator ι),star_smul,Complex.star_def,Complex.conj_ofReal,
    add_mul,mul_add,smul_mul_assoc,mul_smul_comm,annihilation_rightCreation,smul_add,
    smul_smul]
  by_cases hij : i=j
  · simp only [hij,ite_true,vacuumCorrection]
    module
  · simp only [hij,ite_false,add_zero]
    module

 omit [DecidableEq ι] in
theorem add_star_commute_of_correction {A B D : Operator ι}
    (hAB : A*B=B*A) (h : star A*B=B*star A+D) (hD : star D=D) :
    Commute (A+star A) (B+star B) := by
  have habs : star A*star B=star B*star A := by
    have he := congrArg star hAB
    simpa only [star_mul] using he.symm
  have has : A*star B=star B*A-D := by
    have he := congrArg star h
    simp only [star_mul,star_star,star_add (R := Operator ι),hD] at he
    exact eq_sub_iff_add_eq.mpr he.symm
  change _*_=_*_
  rw [add_mul,mul_add,mul_add,hAB,has,h,habs]
  simp only [mul_add,add_mul]
  abel

 theorem S_commute_rightS (u v : ℝ) (i j : ι) :
    Commute (S u v i) (rightS u v j) := by
  rw [S_eq,rightS]
  apply add_star_commute_of_correction (C_commute_rightC u v i j).eq
    (C_annihilation_rightC u v i j)
  split_ifs
  · exact (vacuumCorrection_selfAdjoint u v).star_eq
  · exact star_zero (Operator ι)

 theorem rightP_projection : IsStarProjection (rightP : Operator ι) := CoordinateProjection.projection _

 theorem P_commute_rightS (u v : ℝ) (i : ι) : Commute (P : Operator ι) (rightS u v i) := by
  have hc : Commute (P : Operator ι) (rightC u v i) :=
    ((P_commute_rightCreation i true).smul_right _).add_right
      ((P_commute_rightCreation i false).smul_right _)
  have hs := hc.star_star
  rw [projection_P.isSelfAdjoint.star_eq] at hs
  exact hc.add_right hs

 theorem rightP_commute_S (u v : ℝ) (i : ι) : Commute (rightP : Operator ι) (S u v i) := by
  have hc : Commute (rightP : Operator ι) (C u v i) :=
    ((rightP_commute_creation i true).smul_right _).add_right
      ((rightP_commute_creation i false).smul_right _)
  have hs := hc.star_star
  rw [rightP_projection.isSelfAdjoint.star_eq] at hs
  exact hc.add_right hs

end

section
open FreeFock
open scoped ComplexConjugate
variable {ι : Type u_14} [DecidableEq ι]

def ambientCommutant (u v : ℝ) : StarSubalgebra ℂ (Operator ι) :=
  StarSubalgebra.centralizer ℂ (insert P (Set.range (S u v : ι → Operator ι)))

def Good (u v : ℝ) (A : Operator ι) : Prop :=
  A ∈ ambientAlgebra u v ∧ reverseConj A ∈ ambientCommutant u v ∧
    reverseConj A (vacuum u v)=star A (vacuum u v)

theorem good_one (u v : ℝ) : Good u v (1 : Operator ι) := by
  refine ⟨(ambientAlgebra u v).one_mem,?_,?_⟩
  · rw [map_one]; exact (ambientCommutant u v).one_mem
  · simp only [map_one,star_one]

theorem good_zero (u v : ℝ) : Good u v (0 : Operator ι) := by
  refine ⟨(ambientAlgebra u v).zero_mem,?_,?_⟩
  · rw [map_zero]; exact (ambientCommutant u v).zero_mem
  · simp only [map_zero,star_zero (Operator ι)]

theorem good_sub {u v : ℝ} {A B : Operator ι} (hA : Good u v A) (hB : Good u v B) :
    Good u v (A-B) := by
  refine ⟨(ambientAlgebra u v).sub_mem hA.1 hB.1,?_,?_⟩
  · rw [map_sub]; exact (ambientCommutant u v).sub_mem hA.2.1 hB.2.1
  · simp only [map_sub,sub_apply,star_sub (R := Operator ι),hA.2.2,hB.2.2]

theorem good_smul {u v : ℝ} {A : Operator ι} (c : ℝ) (hA : Good u v A) :
    Good u v ((c:ℂ) • A) := by
  refine ⟨(ambientAlgebra u v).smul_mem hA.1 _,?_,?_⟩
  · rw [map_smul]; exact (ambientCommutant u v).smul_mem hA.2.1 _
  · simp only [map_smul,_root_.smul_apply,star_smul,Complex.star_def,
      Complex.conj_ofReal,hA.2.2]

theorem good_mul {u v : ℝ} {A B : Operator ι} (hA : Good u v A) (hB : Good u v B) :
    Good u v (A*B) := by
  refine ⟨(ambientAlgebra u v).mul_mem hA.1 hB.1,?_,?_⟩
  · rw [map_mul]; exact (ambientCommutant u v).mul_mem hA.2.1 hB.2.1
  · have hc := ((StarSubalgebra.mem_centralizer_iff ℂ).mp
      (star_mem hB.1) _ hA.2.1).1
    rw [map_mul,mul_apply_eq_comp,hB.2.2,← mul_apply_eq_comp,hc,
      mul_apply_eq_comp,hA.2.2,star_mul,mul_apply_eq_comp]

theorem reverseConj_vacuum (A : Operator ι) (u v : ℝ) :
    reverseConj A (vacuum u v)=reverseOperator (A (vacuum u v)) := by
  rw [reverseConj_apply,reverse_vacuum]

theorem rightP_mem_commutant (u v : ℝ) : (rightP : Operator ι) ∈ ambientCommutant u v := by
  rw [ambientCommutant,StarSubalgebra.mem_centralizer_iff]
  intro A hA
  rcases Set.mem_insert_iff.mp hA with hA | ⟨i,rfl⟩
  · subst A
    refine ⟨(CoordinateProjection.commute _ _).eq,?_⟩
    rw [projection_P.isSelfAdjoint.star_eq]
    exact (CoordinateProjection.commute _ _).eq
  · refine ⟨(rightP_commute_S u v i).eq.symm,?_⟩
    rw [(S_selfAdjoint u v i).star_eq]
    exact (rightP_commute_S u v i).eq.symm

theorem rightS_mem_commutant (u v : ℝ) (j : ι) : rightS u v j ∈ ambientCommutant u v := by
  rw [ambientCommutant,StarSubalgebra.mem_centralizer_iff]
  intro A hA
  rcases Set.mem_insert_iff.mp hA with hA | ⟨i,rfl⟩
  · subst A
    refine ⟨(P_commute_rightS u v j).eq,?_⟩
    rw [projection_P.isSelfAdjoint.star_eq]
    exact (P_commute_rightS u v j).eq
  · refine ⟨(S_commute_rightS u v i j).eq,?_⟩
    rw [(S_selfAdjoint u v i).star_eq]
    exact (S_commute_rightS u v i j).eq

theorem good_P (u v : ℝ) : Good u v (P : Operator ι) := by
  refine ⟨P_mem_ambient u v,?_,?_⟩
  · rw [reverseConj_P]; exact rightP_mem_commutant u v
  · rw [reverseConj_vacuum,projection_P.isSelfAdjoint.star_eq]
    simp only [vacuum,map_add,map_smul,P_nil_true,P_nil_false,smul_zero,add_zero,
      reverseOperator_single,reverse_nil]

theorem good_S (u v : ℝ) (i : ι) : Good u v (S u v i) := by
  refine ⟨S_mem_ambient u v i,?_,?_⟩
  · rw [reverseConj_S]; exact rightS_mem_commutant u v i
  · rw [reverseConj_vacuum,(S_selfAdjoint u v i).star_eq]
    simp only [vacuum,map_add,map_smul,S_nil,reverseOperator_single,reverse_cons,
      reverse_nil,appendPath,List.nil_append,smul_add,smul_smul]
    module

def vertex (r : Bool) : Operator ι := if r then P else 1-P

def weight (u v : ℝ) (r : Bool) : ℝ := if r then u else v

theorem good_vertex (u v : ℝ) (r : Bool) : Good u v (vertex r : Operator ι) := by
  cases r
  · exact good_sub (good_one u v) (good_P u v)
  · exact good_P u v

theorem weight_ne_zero {u v : ℝ} (hu : u≠0) (hv : v≠0) (r : Bool) : weight u v r ≠ 0 := by
  cases r <;> assumption

@[simp] theorem vertex_single (r : Bool) (w : Path ι) (z : ℂ) :
    (vertex r : Operator ι) (lp.single 2 w z)=if start w=r then lp.single 2 w z else 0 := by
  cases r <;> cases h : start w <;> simp [vertex,P_single,h]

 theorem vertex_S_nil (u v : ℝ) (i : ι) (r e : Bool) :
    (vertex r : Operator ι) (S u v i (lp.single 2 ([],e) 1))=
      ((weight u v r):ℂ) • lp.single 2 ([(i,r)],e) 1 := by
  rw [S_nil]
  simp only [map_add,map_smul]
  cases r <;> simp only [vertex_single,start,weight,Bool.false_eq_true,Bool.true_eq_false,
    ite_true,ite_false,smul_zero,zero_add,add_zero]

 theorem S_cons (u v : ℝ) (i j : ι) (s e : Bool) (w : List (ι×Bool)) :
    S u v i (lp.single 2 ((j,s)::w,e) 1)=
      (u:ℂ) • lp.single 2 ((i,true)::(j,s)::w,e) 1+
      (v:ℂ) • lp.single 2 ((i,false)::(j,s)::w,e) 1+
      (if i=j then ((weight u v s):ℂ) • lp.single 2 (w,e) 1 else 0) := by
  simp only [S,star_add (R := Operator ι),star_smul,Complex.star_def,Complex.conj_ofReal,add_apply,
    _root_.smul_apply,creation_single,annihilation_single_cons,Prod.mk.injEq]
  cases s <;> by_cases hij : i=j <;> simp [hij,weight]

 theorem vertex_S_cons (u v : ℝ) (i j : ι) (r s e : Bool) (w : List (ι×Bool)) :
    (vertex r : Operator ι) (S u v i (lp.single 2 ((j,s)::w,e) 1))=
      ((weight u v r):ℂ) • lp.single 2 ((i,r)::(j,s)::w,e) 1+
      (if i=j then ((weight u v s):ℂ) • (vertex r : Operator ι) (lp.single 2 (w,e) 1) else 0) := by
  rw [S_cons,map_add,map_add]
  cases r <;> cases s <;> by_cases hij : i=j <;>
    simp only [hij,ite_true,ite_false,map_smul,map_zero,vertex_single,start,weight,
      Bool.false_eq_true,Bool.true_eq_false,smul_zero,zero_add,add_zero]

 theorem vertex_vacuum (u v : ℝ) (r : Bool) :
    (vertex r : Operator ι) (vacuum u v)=((weight u v r):ℂ) • lp.single 2 ([],r) 1 := by
  simp only [vacuum,map_add,map_smul]
  cases r <;> simp only [vertex_single,start,weight,Bool.false_eq_true,Bool.true_eq_false,
    ite_true,ite_false,smul_zero,zero_add,add_zero]

 theorem good_basis (u v : ℝ) (hu : u≠0) (hv : v≠0) (w : Path ι) :
    ∃ A : Operator ι, Good u v A ∧ A (vacuum u v)=lp.single 2 w 1 := by
  have h : ∀ l : List (ι×Bool),
      (∀ e, ∃ A : Operator ι, Good u v A ∧ A (vacuum u v)=lp.single 2 (l,e) 1) ∧
      (∀ i r e, ∃ A : Operator ι, Good u v A ∧ A (vacuum u v)=lp.single 2 ((i,r)::l,e) 1) := by
    intro l
    induction l with
    | nil =>
      have root (e : Bool) : ∃ A : Operator ι, Good u v A ∧
          A (vacuum u v)=lp.single 2 ([],e) 1 := by
        refine ⟨(((weight u v e)⁻¹:ℝ):ℂ) • vertex e,good_smul _ (good_vertex u v e),?_⟩
        rw [_root_.smul_apply,vertex_vacuum,smul_smul]
        simp only [Complex.ofReal_inv,inv_mul_cancel₀ (Complex.ofReal_ne_zero.mpr
          (weight_ne_zero hu hv e)),one_smul]
      refine ⟨root,?_⟩
      intro i r e
      obtain ⟨A,hA,he⟩ := root e
      refine ⟨(((weight u v r)⁻¹:ℝ):ℂ) • (vertex r*S u v i*A),
        good_smul _ (good_mul (good_mul (good_vertex u v r) (good_S u v i)) hA),?_⟩
      simp only [_root_.smul_apply,mul_apply_eq_comp,he,vertex_S_nil,smul_smul,
        Complex.ofReal_inv,inv_mul_cancel₀ (Complex.ofReal_ne_zero.mpr
          (weight_ne_zero hu hv r)),one_smul]
    | cons b l ih =>
      rcases b with ⟨j,s⟩
      refine ⟨ih.2 j s,?_⟩
      intro i r e
      obtain ⟨A,hA,heA⟩ := ih.2 j s e
      obtain ⟨B,hB,heB⟩ := ih.1 e
      let D : Operator ι := if i=j then ((weight u v s):ℂ) • (vertex r*B) else 0
      have hD : Good u v D := by
        dsimp [D]
        split_ifs
        · exact good_smul _ (good_mul (good_vertex u v r) hB)
        · exact good_zero u v
      have heD : D (vacuum u v)=if i=j then ((weight u v s):ℂ) •
          (vertex r : Operator ι) (lp.single 2 (l,e) 1) else 0 := by
        dsimp [D]
        split_ifs
        · change ((weight u v s):ℂ) • ((vertex r : Operator ι) (B (vacuum u v)))=_
          rw [heB]
          ext x
          simp only [lp.coeFn_smul,Pi.smul_apply]
          rfl
        · rfl
      refine ⟨(((weight u v r)⁻¹:ℝ):ℂ) • (vertex r*S u v i*A-D),
        good_smul _ (good_sub (good_mul (good_mul (good_vertex u v r) (good_S u v i)) hA) hD),?_⟩
      simp only [_root_.smul_apply,sub_apply,mul_apply_eq_comp,heA,vertex_S_cons,
        heD,add_sub_cancel_right,smul_smul,Complex.ofReal_inv,
        inv_mul_cancel₀ (Complex.ofReal_ne_zero.mpr (weight_ne_zero hu hv r)),one_smul]
  exact (h w.1).1 w.2

end

open FreeFock
open scoped ComplexConjugate
variable {ι : Type u_15} [DecidableEq ι]

 theorem good_star {u v : ℝ} {A : Operator ι} (hA : Good u v A) :
    Good u v (star A) := by
  refine ⟨star_mem hA.1,?_,?_⟩
  · have hs : reverseConj (star A) = star (reverseConj A) := reverseConj.map_star' A
    rw [hs]; exact star_mem hA.2.1
  · rw [reverseConj_vacuum,star_star,← hA.2.2,reverseConj_vacuum,
      reverseOperator_involutive]

 theorem good_right_basis (u v : ℝ) (hu : u≠0) (hv : v≠0) (w : Path ι) :
    ∃ B : Operator ι, B ∈ ambientCommutant u v ∧
      B (vacuum u v)=lp.single 2 w 1 ∧ star B (vacuum u v)=lp.single 2 (reversePath w) 1 := by
  obtain ⟨A,hA,heA⟩ := good_basis u v hu hv (reversePath w)
  refine ⟨reverseConj A,hA.2.1,?_,?_⟩
  · rw [reverseConj_vacuum,heA,reverseOperator_single,reversePath_reverse]
  · have hs : reverseConj (star A) = star (reverseConj A) := reverseConj.map_star' A
    rw [← hs,(good_star hA).2.2,star_star,heA]

 theorem ambient_star_vector (u v : ℝ) (hu : u≠0) (hv : v≠0)
    (T : ambientAlgebra (ι := ι) u v) (w : Path ι) :
    ((star (T : Operator ι)) (vacuum u v)) w=
      conj (((T : Operator ι) (vacuum u v)) (reversePath w)) := by
  obtain ⟨B,hB,heB,hesB⟩ := good_right_basis u v hu hv w
  have hc := ((StarSubalgebra.mem_centralizer_iff ℂ).mp T.property _ hB).1
  have hec := DFunLike.congr_fun hc (vacuum u v)
  simp only [mul_apply_eq_comp,heB] at hec
  have he : inner ℂ (lp.single 2 w 1) ((star (T : Operator ι)) (vacuum u v))=
      inner ℂ ((T : Operator ι) (vacuum u v)) (lp.single 2 (reversePath w) 1) := by
    calc
      _ = inner ℂ ((T : Operator ι) (lp.single 2 w 1)) (vacuum u v) := by
        rw [ContinuousLinearMap.star_eq_adjoint,ContinuousLinearMap.adjoint_inner_right]
      _ = inner ℂ (B ((T : Operator ι) (vacuum u v))) (vacuum u v) := by rw [hec]
      _ = inner ℂ ((T : Operator ι) (vacuum u v)) ((star B) (vacuum u v)) := by
        rw [ContinuousLinearMap.star_eq_adjoint,ContinuousLinearMap.adjoint_inner_right]
      _ = _ := by rw [hesB]
  simpa [lp.inner_single_left,lp.inner_single_right,RCLike.inner_apply] using he

 def vacuumTrace (u v : ℝ) (T : Operator ι) : ℂ := inner ℂ (vacuum u v) (T (vacuum u v))

 theorem ambient_trace_mul (u v : ℝ) (hu : u≠0) (hv : v≠0)
    (S T : ambientAlgebra (ι := ι) u v) :
    vacuumTrace u v ((S : Operator ι)*(T : Operator ι))=
      vacuumTrace u v ((T : Operator ι)*(S : Operator ι)) := by
  have hf (A B : ambientAlgebra (ι := ι) u v) :
      vacuumTrace u v ((A : Operator ι)*(B : Operator ι))=
        ∑' w : Path ι, ((A : Operator ι) (vacuum u v)) (reversePath w)*
          ((B : Operator ι) (vacuum u v)) w := by
    unfold vacuumTrace
    rw [mul_apply_eq_comp,← ContinuousLinearMap.adjoint_inner_left]
    change inner ℂ ((star (A : Operator ι)) (vacuum u v)) ((B : Operator ι) (vacuum u v))=_
    rw [lp.inner_eq_tsum]
    congr 1
    funext w
    rw [ambient_star_vector u v hu hv]
    simp [RCLike.inner_apply,mul_comm]
  rw [hf,hf]
  let e : Path ι ≃ Path ι := ⟨reversePath,reversePath,
    reversePath_involutive,reversePath_involutive⟩
  have hs := e.tsum_eq (fun w : Path ι => ((T : Operator ι) (vacuum u v)) (reversePath w)*
    ((S : Operator ι) (vacuum u v)) w)
  change (∑' w : Path ι, ((T : Operator ι) (vacuum u v)) (reversePath (reversePath w))*
    ((S : Operator ι) (vacuum u v)) (reversePath w))=_ at hs
  simpa only [reversePath_reverse,mul_comm] using hs

 theorem vacuumTrace_one (u v : ℝ) : vacuumTrace u v (1 : Operator ι)=((u^2+v^2:ℝ):ℂ) := by
  simp only [vacuumTrace,one_apply_eq_self,vacuum,inner_add_left,inner_add_right,
    inner_smul_left,inner_smul_right,lp.inner_single_left]
  simp [lp.single_apply,RCLike.inner_apply,pow_two]

 theorem vacuumTrace_P (u v : ℝ) : vacuumTrace u v (P : Operator ι)=((u^2:ℝ):ℂ) := by
  simp only [vacuumTrace,vacuum,map_add,map_smul,P_nil_true,P_nil_false,smul_zero,
    add_zero,inner_add_left,inner_smul_left,inner_smul_right,lp.inner_single_left]
  simp [lp.single_apply,RCLike.inner_apply,pow_two]

end FreeGroupFactorMain.WeightedFock

end

end OAI
end

section
namespace OAI

noncomputable section

universe u_1 u_2 u_3 u_4 u_5 u_6 u_7 u_8 u_9

namespace FreeGroupFactorMain.Amplification.Polar

section

variable {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℂ E] [CompleteSpace E]
abbrev Operator (E : Type u_2) [NormedAddCommGroup E] [InnerProductSpace ℂ E] := E →L[ℂ] E

def modulus (T : Operator E) : Operator E := CFC.sqrt (star T*T)

theorem modulus_star (T : Operator E) : star (modulus T) = modulus T :=
  (IsSelfAdjoint.of_nonneg (CFC.sqrt_nonneg _)).star_eq

theorem modulus_sq (T : Operator E) : modulus T*modulus T = star T*T :=
  CFC.sqrt_mul_sqrt_self _ (star_mul_self_nonneg T)

theorem modulus_norm (T : Operator E) (x : E) : ‖modulus T x‖ = ‖T x‖ := by
  have hinner : inner ℂ (modulus T x) (modulus T x) = inner ℂ (T x) (T x) := by
    calc
      _ = inner ℂ ((star (modulus T)*modulus T) x) x := by
        exact (ContinuousLinearMap.adjoint_inner_left (modulus T) x (modulus T x)).symm
      _ = inner ℂ ((star T*T) x) x := by rw [modulus_star,modulus_sq]
      _ = _ := ContinuousLinearMap.adjoint_inner_left T x (T x)
  have hs : ‖modulus T x‖^2 = ‖T x‖^2 := by
    simpa only [inner_self_eq_norm_sq] using congrArg (RCLike.re : ℂ → ℝ) hinner
  nlinarith [norm_nonneg (modulus T x),norm_nonneg (T x)]

def closedRange (T : Operator E) : Submodule ℂ E := T.toLinearMap.range.topologicalClosure

instance closedRange_complete (T : Operator E) : CompleteSpace (closedRange T) :=
  (Submodule.isClosed_topologicalClosure _).isComplete.completeSpace_coe

def intoClosedRange (T : Operator E) : E →L[ℂ] closedRange T :=
  T.codRestrict (closedRange T) (fun x => Submodule.le_topologicalClosure _ (LinearMap.mem_range_self _ x))

omit [CompleteSpace E] in
theorem intoClosedRange_dense (T : Operator E) : DenseRange (intoClosedRange T) := by
  rw [DenseRange,Subtype.dense_iff,← Set.range_comp]
  change (closedRange T : Set E) ⊆ closure (Set.range (fun x : E => T x))
  rw [closedRange,Submodule.topologicalClosure_coe]
  exact Set.Subset.rfl

def polarSpatial (T : Operator E) : closedRange (modulus T) ≃ₗᵢ[ℂ] closedRange T :=
  (LinearEquiv.refl ℂ E).extendOfIsometry (intoClosedRange (modulus T)).toLinearMap
    (intoClosedRange T).toLinearMap (intoClosedRange_dense _) (intoClosedRange_dense _)
    (fun x => (modulus_norm T x).symm)

theorem polarSpatial_modulus (T : Operator E) (x : E) :
    polarSpatial T (intoClosedRange (modulus T) x) = intoClosedRange T x :=
  LinearEquiv.extendOfIsometry_eq _ _ _ _ _ _ x

def partialIsometry (T : Operator E) : Operator E :=
  (closedRange T).subtypeL.comp ((polarSpatial T).toContinuousLinearEquiv.toContinuousLinearMap.comp
    (closedRange (modulus T)).orthogonalProjectionOnto)

theorem partialIsometry_factorization (T : Operator E) : partialIsometry T * modulus T = T := by
  apply ContinuousLinearMap.ext
  intro x
  change ((polarSpatial T) ((closedRange (modulus T)).orthogonalProjectionOnto (modulus T x)) : E) = T x
  have he : (closedRange (modulus T)).orthogonalProjectionOnto (modulus T x) = intoClosedRange (modulus T) x :=
    Submodule.orthogonalProjectionOnto_mem_subspace_eq_self (intoClosedRange (modulus T) x)
  rw [he,polarSpatial_modulus]
  rfl

theorem partialIsometry_on_range (T : Operator E) (x : closedRange (modulus T)) :
    partialIsometry T x = (polarSpatial T x : E) := by
  change ((polarSpatial T) ((closedRange (modulus T)).orthogonalProjectionOnto x) : E) = _
  rw [Submodule.orthogonalProjectionOnto_mem_subspace_eq_self]

theorem partialIsometry_inner (T : Operator E) (x y : E) :
    inner ℂ (partialIsometry T x) (partialIsometry T y) =
      inner ℂ ((closedRange (modulus T)).starProjection x) y := by
  change inner ℂ (polarSpatial T ((closedRange (modulus T)).orthogonalProjectionOnto x))
      (polarSpatial T ((closedRange (modulus T)).orthogonalProjectionOnto y)) = _
  rw [(polarSpatial T).inner_map_map]
  exact Submodule.inner_orthogonalProjectionOnto_eq_of_mem_left _ _

theorem partialIsometry_initial (T : Operator E) :
    star (partialIsometry T)*partialIsometry T = (closedRange (modulus T)).starProjection := by
  apply ContinuousLinearMap.ext
  intro x
  apply ext_inner_right ℂ
  intro y
  rw [mul_apply_eq_comp,ContinuousLinearMap.star_eq_adjoint,
    ContinuousLinearMap.adjoint_inner_left,partialIsometry_inner]

theorem partialIsometry_adjoint (T : Operator E) (x : E) :
    star (partialIsometry T) x =
      ((polarSpatial T).symm ((closedRange T).orthogonalProjectionOnto x) : E) := by
  apply ext_inner_right ℂ
  intro y
  rw [ContinuousLinearMap.star_eq_adjoint,ContinuousLinearMap.adjoint_inner_left]
  change inner ℂ x ((polarSpatial T) ((closedRange (modulus T)).orthogonalProjectionOnto y) : E) = _
  rw [← Submodule.inner_orthogonalProjectionOnto_eq_of_mem_right
    ((polarSpatial T) ((closedRange (modulus T)).orthogonalProjectionOnto y)) x]
  rw [← (polarSpatial T).symm.inner_map_map,(polarSpatial T).symm_apply_apply]
  exact Submodule.inner_orthogonalProjectionOnto_eq_of_mem_left _ _

theorem partialIsometry_final (T : Operator E) :
    partialIsometry T*star (partialIsometry T) = (closedRange T).starProjection := by
  apply ContinuousLinearMap.ext
  intro x
  rw [mul_apply_eq_comp,partialIsometry_adjoint,partialIsometry_on_range,
    (polarSpatial T).apply_symm_apply]
  rfl

end
section
variable {E : Type u_3} [NormedAddCommGroup E] [InnerProductSpace ℂ E] [CompleteSpace E]

 theorem modulus_commute {T S : Operator E} (h : Commute T S) (hstar : Commute (star T) S) :
    Commute (modulus T) S :=
  (hstar.mul_left h).cfcₙ_nnreal NNReal.sqrt

omit [CompleteSpace E] in
 theorem closedRange_invariant {T S : Operator E} (h : Commute T S) :
    ∀ x ∈ closedRange T, S x ∈ closedRange T := by
  have hi : T.toLinearMap.range ∈ Module.End.invtSubmodule S := by
    rw [Module.End.mem_invtSubmodule_iff_map_le]
    rintro _ ⟨_,⟨x,rfl⟩,rfl⟩
    refine ⟨S x,?_⟩
    exact DFunLike.congr_fun h.eq x
  exact Submodule.topologicalClosure_mem_invtSubmodule hi

 theorem orthogonal_invariant (K : Submodule ℂ E) (S : Operator E)
    (h : ∀ x ∈ K, star S x ∈ K) : ∀ x ∈ Kᗮ, S x ∈ Kᗮ := by
  intro x hx
  rw [Submodule.mem_orthogonal] at hx ⊢
  intro y hy
  rw [← ContinuousLinearMap.adjoint_inner_left]
  exact hx (star S y) (h y hy)

 theorem starProjection_commute (K : Submodule ℂ E) [K.HasOrthogonalProjection] (S : Operator E)
    (h : ∀ x ∈ K, S x ∈ K) (hstar : ∀ x ∈ K, star S x ∈ K) :
    Commute K.starProjection S := by
  apply ContinuousLinearMap.ext
  intro x
  change K.starProjection (S x) = S (K.starProjection x)
  apply Submodule.eq_starProjection_of_mem_orthogonal
  · exact h _ (K.orthogonalProjectionOnto x).property
  · rw [← map_sub]
    exact orthogonal_invariant K S hstar _ (K.sub_starProjection_mem_orthogonal x)

 theorem partialIsometry_projection (T : Operator E) :
    partialIsometry T * (closedRange (modulus T)).starProjection = partialIsometry T := by
  apply ContinuousLinearMap.ext
  intro x
  change ((polarSpatial T) ((closedRange (modulus T)).orthogonalProjectionOnto
    ((closedRange (modulus T)).orthogonalProjectionOnto x)) : E) = _
  rw [Submodule.orthogonalProjectionOnto_mem_subspace_eq_self]
  rfl

 theorem partialIsometry_commute {T S : Operator E}
    (h : Commute T S) (hstar : Commute (star T) S)
    (hs : Commute T (star S)) (hstars : Commute (star T) (star S)) :
    Commute (partialIsometry T) S := by
  have hm := modulus_commute h hstar
  have hms := modulus_commute hs hstars
  have hp := starProjection_commute (closedRange (modulus T)) S
    (closedRange_invariant hm) (closedRange_invariant hms)
  have he : Set.EqOn (partialIsometry T * S) (S * partialIsometry T)
      (closedRange (modulus T) : Set E) := by
    apply Set.EqOn.closure _ (partialIsometry T * S).continuous (S * partialIsometry T).continuous
    rintro _ ⟨x,rfl⟩
    change partialIsometry T (S (modulus T x)) = S (partialIsometry T (modulus T x))
    have hmx : modulus T (S x) = S (modulus T x) := DFunLike.congr_fun hm.eq x
    rw [← hmx]
    change (partialIsometry T * modulus T) (S x) = S ((partialIsometry T * modulus T) x)
    rw [partialIsometry_factorization]
    exact DFunLike.congr_fun h.eq x
  apply ContinuousLinearMap.ext
  intro x
  have hx := he ((closedRange (modulus T)).orthogonalProjectionOnto x).property
  change (partialIsometry T * S) x = (S * partialIsometry T) x
  calc
    _ = (partialIsometry T * (closedRange (modulus T)).starProjection * S) x := by
      rw [partialIsometry_projection]
    _ = (partialIsometry T * S * (closedRange (modulus T)).starProjection) x := by
      rw [mul_assoc,hp.eq,← mul_assoc]
    _ = (S * partialIsometry T * (closedRange (modulus T)).starProjection) x := hx
    _ = _ := by rw [mul_assoc,partialIsometry_projection]

end
section
variable {E : Type u_4} [NormedAddCommGroup E] [InnerProductSpace ℂ E] [CompleteSpace E]

 theorem partialIsometry_mem_centralizer (s : Set (Operator E)) {T : Operator E}
    (hT : T ∈ StarSubalgebra.centralizer ℂ s) :
    partialIsometry T ∈ StarSubalgebra.centralizer ℂ s := by
  have ht := (StarSubalgebra.mem_centralizer_iff ℂ).mp hT
  have hts := (StarSubalgebra.mem_centralizer_iff ℂ).mp
    (star_mem hT)
  rw [StarSubalgebra.mem_centralizer_iff]
  intro S hS
  have h₁ : Commute T S := (ht S hS).1.symm
  have h₂ : Commute (star T) S := (hts S hS).1.symm
  have h₃ : Commute T (star S) := (ht S hS).2.symm
  have h₄ : Commute (star T) (star S) := (hts S hS).2.symm
  exact ⟨(partialIsometry_commute h₁ h₂ h₃ h₄).eq.symm,
    (partialIsometry_commute h₃ h₄ (by simpa using h₁) (by simpa using h₂)).eq.symm⟩

 theorem closedRange_eq_orthogonal_ker (T : Operator E) :
    closedRange T = (star T).kerᗮ := by
  simpa only [closedRange,ContinuousLinearMap.star_eq_adjoint,ContinuousLinearMap.adjoint_adjoint]
    using (ContinuousLinearMap.orthogonal_ker (star T)).symm

 theorem modulus_ker (T : Operator E) : (modulus T).ker = T.ker := by
  ext x
  change modulus T x = 0 ↔ T x = 0
  calc
    _ ↔ ‖modulus T x‖ = 0 := norm_eq_zero.symm
    _ ↔ ‖T x‖ = 0 := by rw [modulus_norm]
    _ ↔ _ := norm_eq_zero

 theorem modulus_closedRange (T : Operator E) : closedRange (modulus T) = T.kerᗮ := by
  rw [closedRange_eq_orthogonal_ker,modulus_star,modulus_ker]

end
variable {E : Type u_5} [NormedAddCommGroup E] [InnerProductSpace ℂ E] [CompleteSpace E]

omit [CompleteSpace E] in
 theorem fixed_on_closedRange {q T : Operator E} (h : q*T=T) (x : closedRange T) : q x=x := by
  have he : Set.EqOn q id (Set.range T) := by
    rintro _ ⟨y,rfl⟩
    exact DFunLike.congr_fun h y
  have hc := he.closure q.continuous continuous_id
  apply hc
  have hx := x.property
  change (x : E) ∈ (↑(T.toLinearMap.range.topologicalClosure) : Set E) at hx
  rw [Submodule.topologicalClosure_coe] at hx
  exact hx

 theorem partialIsometry_left_support {q T : Operator E} (h : q*T=T) :
    q*partialIsometry T=partialIsometry T := by
  apply ContinuousLinearMap.ext
  intro x
  exact fixed_on_closedRange h ((polarSpatial T) ((closedRange (modulus T)).orthogonalProjectionOnto x))

 theorem modulus_right_support {p T : Operator E} (h : T*p=T) : modulus T*p=modulus T := by
  apply ContinuousLinearMap.ext
  intro x
  have hz : T (p x-x)=0 := by rw [map_sub]; exact sub_eq_zero.mpr (DFunLike.congr_fun h x)
  have hn : ‖modulus T (p x-x)‖=0 := by rw [modulus_norm,hz,norm_zero]
  change modulus T (p x)=modulus T x
  simpa only [map_sub,sub_eq_zero] using norm_eq_zero.mp hn

 theorem partialIsometry_right_support {p T : Operator E} (hp : IsSelfAdjoint p) (h : T*p=T) :
    partialIsometry T*p=partialIsometry T := by
  have hm := congrArg star (modulus_right_support h)
  simp only [star_mul,hp.star_eq,modulus_star] at hm
  have ha : p*star (partialIsometry T)=star (partialIsometry T) := by
    apply ContinuousLinearMap.ext
    intro x
    rw [mul_apply_eq_comp,partialIsometry_adjoint]
    exact fixed_on_closedRange hm ((polarSpatial T).symm ((closedRange T).orthogonalProjectionOnto x))
  have he := congrArg star ha
  simpa only [star_mul,star_star,hp.star_eq] using he

 theorem partialIsometry_partial (T : Operator E) :
    partialIsometry T*star (partialIsometry T)*partialIsometry T=partialIsometry T := by
  rw [partialIsometry_final]
  apply ContinuousLinearMap.ext
  intro x
  apply Submodule.starProjection_eq_self_iff.mpr
  exact ((polarSpatial T) ((closedRange (modulus T)).orthogonalProjectionOnto x)).property

end FreeGroupFactorMain.Amplification.Polar

namespace FreeGroupFactorMain.WeightedFock
open FreeFock
open Amplification.Polar
variable {ι : Type u_6} [DecidableEq ι]

 theorem weighted_creation_norm (i : ι) (r : Bool) (ξ : H ι) :
    ‖creation i r ξ‖=‖ξ‖ := (hilbertEmbedding (prepend i r)).norm_map ξ

 theorem weighted_creation_opNorm_le (i : ι) (r : Bool) : ‖creation i r‖ ≤ 1 := by
  apply ContinuousLinearMap.opNorm_le_bound _ zero_le_one
  intro ξ
  rw [weighted_creation_norm,one_mul]

 theorem P_creation_true (i : ι) : (P : Operator ι)*creation i true=creation i true := by
  apply operator_basis_ext
  rintro ⟨w,e⟩
  simp only [mul_apply_eq_comp,creation_single,P_cons,ite_true]

 def offDiagonal (u v : ℝ) (i : ι) : Operator ι := P*S u v i*(1-P)

end FreeGroupFactorMain.WeightedFock
namespace FreeGroupFactorMain.Amplification.Polar
variable {E : Type u_7} [NormedAddCommGroup E] [InnerProductSpace ℂ E] [CompleteSpace E]

end FreeGroupFactorMain.Amplification.Polar
namespace FreeGroupFactorMain.WeightedFock

section
open FreeFock
open Amplification.Polar
variable {ι : Type u_8} [DecidableEq ι]

end
open FreeFock
open scoped ENNReal
open Amplification.Polar
variable {ι : Type u_9} [DecidableEq ι]

end FreeGroupFactorMain.WeightedFock

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