MATHLIBANNEX / EXACT SOURCE

MathlibAnnex.CStarAlgebra.CAR.norm_rootRepresentation_le

Exact source: MathlibAnnex/Analysis/CStarAlgebra/CAR/Simplicity.lean, lines 63–73.

Raw UTF-8 source

Back to Simplicity of the completed CAR algebra

1import MathlibAnnex.Analysis.CStarAlgebra.CAR.Completion
2import MathlibAnnex.Analysis.CStarAlgebra.GNSCyclic
3import Mathlib.Analysis.SpecificLimits.Normed
4import Mathlib.Analysis.CStarAlgebra.ContinuousLinearMap
5import Mathlib.RingTheory.TwoSidedIdeal.Operations
6import Mathlib.RingTheory.SimpleRing.Basic
7
8/-!
9# Faithfulness and closed-ideal simplicity of the completed CAR algebra
10-/
11
12set_option autoImplicit false
13set_option maxHeartbeats 800000
14
15open scoped ComplexOrder InnerProductSpace
16
17namespace MathlibAnnex.CStarAlgebra.CAR
18
19/-- The positive-linear-map form of the completed root state. -/
20noncomputable def rootPositiveState : Limit →ₚ[ℂ] ℂ :=
21  PositiveLinearMap.mk₀ rootState.toLinearMap rootState_nonneg
22
23@[simp]
24theorem rootPositiveState_apply (x : Limit) : rootPositiveState x = rootState x := rfl
25
26@[simp]
27theorem rootPositiveState_one : rootPositiveState 1 = 1 := rootState_one
28
29noncomputable instance rootGNSNontrivial : Nontrivial rootPositiveState.GNS := by
30  refine ⟨⟨0, rootPositiveState.gnsCyclicVector, ?_⟩⟩
31  intro h
32  have hn := rootPositiveState.norm_gnsCyclicVector rootPositiveState_one
33  rw [← h, norm_zero] at hn
34  exact zero_ne_one hn
35
36theorem norm_leftMulMapPreGNS_apply_le (x : Limit) (y : rootPositiveState.PreGNS) :
37    ‖rootPositiveState.leftMulMapPreGNS x y‖ ≤ ‖x‖ * ‖y‖ := by
38  rw [PositiveLinearMap.leftMulMapPreGNS_apply]
39  rw [← sq_le_sq₀ (by positivity) (by positivity), mul_pow,
40    ← RCLike.ofReal_le_ofReal (K := ℂ), RCLike.ofReal_pow,
41    RCLike.ofReal_eq_complex_ofReal, PositiveLinearMap.preGNS_norm_sq]
42  have horder :
43      star (rootPositiveState.ofPreGNS y) * star x *
44          (x * rootPositiveState.ofPreGNS y) ≤
45        ‖x‖ ^ 2 • star (rootPositiveState.ofPreGNS y) *
46          rootPositiveState.ofPreGNS y := by
47    rw [← mul_assoc, mul_assoc _ (star x), sq,
48      ← CStarRing.norm_star_mul_self (x := x), smul_mul_assoc]
49    exact CStarAlgebra.star_left_conjugate_le_norm_smul
50  calc
51    _ ≤ rootPositiveState
52        (‖x‖ ^ 2 • star (rootPositiveState.ofPreGNS y) *
53          rootPositiveState.ofPreGNS y) := by
54      simpa using OrderHomClass.mono rootPositiveState horder
55    _ = _ := by
56      simp [← Complex.coe_smul, PositiveLinearMap.preGNS_norm_sq]
57
58theorem norm_leftMulMapPreGNS_le (x : Limit) :
59    ‖rootPositiveState.leftMulMapPreGNS x‖ ≤ ‖x‖ := by
60  exact ContinuousLinearMap.opNorm_le_bound _ (norm_nonneg x)
61    (norm_leftMulMapPreGNS_apply_le x)
62
63theorem norm_rootRepresentation_le (x : Limit) :
64    ‖rootPositiveState.gnsStarAlgHom x‖ ≤ ‖x‖ := by
65  change ‖rootPositiveState.leftMulMapPreGNS x |>.completion‖ ≤ ‖x‖
66  apply ContinuousLinearMap.opNorm_le_bound _ (norm_nonneg x)
67  intro y
68  refine UniformSpace.Completion.induction_on
69    (p := fun y => ‖rootPositiveState.leftMulMapPreGNS x |>.completion y‖ ≤
70      ‖x‖ * ‖y‖) y ?_ ?_
71  · exact isClosed_le (by fun_prop) (by fun_prop)
72  · intro z
73    simpa using norm_leftMulMapPreGNS_apply_le x z
74
75/-- The root GNS representation, bundled as a continuous linear map in its algebra argument. -/
76noncomputable def rootRepresentationCLM :
77    Limit →L[ℂ] (rootPositiveState.GNS →L[ℂ] rootPositiveState.GNS) :=
78  (rootPositiveState.gnsStarAlgHom).toLinearMap.mkContinuous 1 fun x => by
79    simpa using norm_rootRepresentation_le x
80
81@[simp]
82theorem rootRepresentationCLM_apply (x : Limit) :
83    rootRepresentationCLM x = rootPositiveState.gnsStarAlgHom x := by rfl
84
85theorem rootRepresentation_stage_injective (n : ℕ) :
86    Function.Injective (rootPositiveState.gnsStarAlgHom.comp (ofStage n)) :=
87  (rootPositiveState.gnsStarAlgHom.comp (ofStage n)).toRingHom.injective
88
89theorem norm_rootRepresentation_stage (n : ℕ) (x : Stage n) :
90    ‖rootPositiveState.gnsStarAlgHom (ofStage n x)‖ = ‖ofStage n x‖ := by
91  exact NonUnitalStarAlgHom.norm_map
92    (rootPositiveState.gnsStarAlgHom.comp (ofStage n))
93    (rootRepresentation_stage_injective n) x |>.trans (norm_ofStage n x).symm
94
95theorem norm_rootRepresentation (x : Limit) :
96    ‖rootPositiveState.gnsStarAlgHom x‖ = ‖x‖ := by
97  let f : Limit → ℝ := fun x => ‖rootRepresentationCLM x‖
98  let g : Limit → ℝ := fun x => ‖x‖
99  have hfg : f = g := (rootRepresentationCLM.continuous.norm).ext_on
100      dense_stageRange continuous_norm fun x hx => by
101    rcases Set.mem_iUnion.mp hx with ⟨n, hn⟩
102    rcases hn with ⟨a, rfl⟩
103    exact norm_rootRepresentation_stage n a
104  exact congrFun hfg x
105
106theorem rootRepresentation_injective :
107    Function.Injective rootPositiveState.gnsStarAlgHom :=
108  fun x y hxy => by
109    rw [← sub_eq_zero, ← norm_eq_zero, ← norm_rootRepresentation]
110    rw [map_sub, hxy, sub_self, norm_zero]
111
112/-- Matrix coefficients of the cyclic root vector separate elements because its
113GNS representation is faithful. -/
114theorem exists_rootState_mul_ne_zero {x : Limit} (hx : x ≠ 0) :
115    ∃ b c : Limit, rootState (b * x * c) ≠ 0 := by
116  by_contra h
117  push Not at h
118  have horbit (c : Limit) :
119      rootPositiveState.gnsStarAlgHom x
120        (rootPositiveState.gnsStarAlgHom c rootPositiveState.gnsCyclicVector) = 0 := by
121    apply norm_eq_zero.mp
122    calc
123      ‖rootPositiveState.gnsStarAlgHom x
124          (rootPositiveState.gnsStarAlgHom c rootPositiveState.gnsCyclicVector)‖ =
125          ‖rootPositiveState.gnsStarAlgHom (x * c)
126            rootPositiveState.gnsCyclicVector‖ := by
127        rw [map_mul]
128        rfl
129      _ = ‖(rootPositiveState.toPreGNS (x * c) : rootPositiveState.GNS)‖ := by
130        rw [PositiveLinearMap.gnsStarAlgHom_apply_gnsCyclicVector]
131      _ = ‖rootPositiveState.toPreGNS (x * c)‖ :=
132        UniformSpace.Completion.norm_coe _
133      _ = 0 := by
134        have hs : ((‖rootPositiveState.toPreGNS (x * c)‖ ^ 2 : ℝ) : ℂ) = 0 := by
135          calc
136            ((‖rootPositiveState.toPreGNS (x * c)‖ ^ 2 : ℝ) : ℂ) =
137                rootPositiveState (star (x * c) * (x * c)) := by
138              simpa using rootPositiveState.preGNS_norm_sq
139                (rootPositiveState.toPreGNS (x * c))
140            _ = 0 := by
141              change rootState (star (x * c) * (x * c)) = 0
142              rw [star_mul]
143              simpa only [mul_assoc] using h (star c * star x) c
144        exact (sq_eq_zero_iff).mp (Complex.ofReal_injective hs)
145  have hop : rootPositiveState.gnsStarAlgHom x = 0 := by
146    apply ContinuousLinearMap.coeFn_injective
147    exact (rootPositiveState.gnsStarAlgHom x).continuous.ext_on
148      rootPositiveState.denseRange_gnsStarAlgHom_apply_gnsCyclicVector
149      continuous_zero fun y hy => by
150        rcases hy with ⟨c, rfl⟩
151        exact horbit c
152  apply hx
153  apply rootRepresentation_injective
154  simpa using hop
155
156private theorem rootProjection_ne_zero (n : ℕ) : rootProjection n ≠ 0 := by
157  intro h
158  have hentry := congrArg (fun x : Stage n => x 0 0) h
159  simp [rootProjection] at hentry
160
161/-- A nonzero element of a two-sided ideal forces one projection of the root flag
162into that ideal. The inverse is obtained by a Neumann-series perturbation of `1`. -/
163theorem exists_rootFlag_mem_of_ne_zero_mem (I : TwoSidedIdeal Limit)
164    {x : Limit} (hx : x ≠ 0) (hxI : x ∈ I) :
165    ∃ n, rootFlag n ∈ I := by
166  obtain ⟨b, c, hbc⟩ := exists_rootState_mul_ne_zero hx
167  let y := b * x * c
168  let lam := rootState y
169  have hlam : lam ≠ 0 := hbc
170  have hyI : y ∈ I := by
171    exact I.mul_mem_right (b * x) c (I.mul_mem_left b x hxI)
172  have hinv : (lam⁻¹ : ℂ) ≠ 0 := inv_ne_zero hlam
173  let δ : ℝ := 1 / (2 * ‖(lam⁻¹ : ℂ)‖)
174  have hden : 0 < 2 * ‖(lam⁻¹ : ℂ)‖ := mul_pos two_pos (norm_pos_iff.mpr hinv)
175  have hδ : 0 < δ := one_div_pos.mpr hden
176  obtain ⟨N, hN⟩ := Metric.tendsto_atTop.mp (tendsto_norm_compressionError y) δ hδ
177  have herr : ‖compressionError N y‖ < δ := by
178    have := hN N le_rfl
179    simpa [Real.dist_eq, abs_of_nonneg (norm_nonneg _)] using this
180  let q := rootFlag N
181  let z := q * y * q
182  have hq : IsStarProjection q := isStarProjection_rootFlag N
183  have hzI : z ∈ I := I.mul_mem_right (q * y) q (I.mul_mem_left q y hyI)
184  have herr' : ‖z - lam • q‖ < δ := by
185    simpa [compressionError, q, z, lam] using herr
186  have hscaled_eq : q - lam⁻¹ • z = -(lam⁻¹ • (z - lam • q)) := by
187    rw [smul_sub, smul_smul, inv_mul_cancel₀ hlam, one_smul]
188    abel
189  have hhalf : ‖(lam⁻¹ : ℂ)‖ * δ = (1 : ℝ) / 2 := by
190    dsimp [δ]
191    rw [one_div, mul_inv_rev, ← mul_assoc,
192      mul_inv_cancel₀ (norm_ne_zero_iff.mpr hinv), one_mul]
193    norm_num
194  have hsmall : ‖q - lam⁻¹ • z‖ < 1 := by
195    rw [hscaled_eq, norm_neg, norm_smul]
196    calc
197      ‖(lam⁻¹ : ℂ)‖ * ‖z - lam • q‖ <
198          ‖(lam⁻¹ : ℂ)‖ * δ :=
199        mul_lt_mul_of_pos_left herr' (norm_pos_iff.mpr hinv)
200      _ = (1 : ℝ) / 2 := hhalf
201      _ < 1 := by norm_num
202  have hu : IsUnit (1 - (q - lam⁻¹ • z)) :=
203    isUnit_one_sub_of_norm_lt_one hsmall
204  have hzq : z * q = z := by
205    dsimp [z]
206    rw [mul_assoc, hq.isIdempotentElem.eq]
207  have huq : (1 - (q - lam⁻¹ • z)) * q = lam⁻¹ • z := by
208    rw [sub_mul, one_mul, sub_mul, hq.isIdempotentElem.eq, smul_mul_assoc, hzq]
209    abel
210  let U := hu.unit
211  have hU : (U : Limit) = 1 - (q - lam⁻¹ • z) := hu.unit_spec
212  have hqexpr : q = (↑(U⁻¹) : Limit) * (lam⁻¹ • z) := by
213    calc
214      q = (↑(U⁻¹) : Limit) * ((U : Limit) * q) := by
215        rw [← mul_assoc, Units.inv_mul, one_mul]
216      _ = (↑(U⁻¹) : Limit) * (lam⁻¹ • z) := by rw [hU, huq]
217  refine ⟨N, ?_⟩
218  rw [show rootFlag N = q by rfl, hqexpr, Algebra.smul_def]
219  exact I.mul_mem_left (↑(U⁻¹) : Limit) _
220    (I.mul_mem_left (algebraMap ℂ Limit lam⁻¹) z hzI)
221
222noncomputable instance limitIsSimpleRing : IsSimpleRing Limit :=
223  IsSimpleRing.of_eq_bot_or_eq_top fun I => by
224    by_cases hI : I = ⊥
225    · exact Or.inl hI
226    · right
227      obtain ⟨x, hxI, hx⟩ := SetLike.exists_of_lt (bot_lt_iff_ne_bot.mpr hI)
228      have hx0 : x ≠ 0 := by simpa using hx
229      obtain ⟨n, hflagI⟩ := exists_rootFlag_mem_of_ne_zero_mem I hx0 hxI
230      let J : TwoSidedIdeal (Stage n) := TwoSidedIdeal.comap (ofStage n).toRingHom I
231      have hpJ : rootProjection n ∈ J := by
232        exact TwoSidedIdeal.mem_comap (ofStage n).toRingHom |>.2 hflagI
233      have honeJ : (1 : Stage n) ∈ J :=
234        IsSimpleRing.one_mem_of_ne_zero_mem J (rootProjection_ne_zero n) hpJ
235      apply TwoSidedIdeal.eq_top
236      have honeI : (1 : Limit) ∈ I := by
237        have := TwoSidedIdeal.mem_comap (ofStage n).toRingHom |>.1 honeJ
238        rw [← (ofStage n).map_one]
239        exact this
240      exact honeI
241
242/-- The completed CAR algebra is simple in the stipulated closed-two-sided-ideal sense. -/
243theorem isSimpleCStarAlgebra_limit : MathlibAnnex.CStarAlgebra.IsSimpleCStarAlgebra Limit := by
244  constructor
245  · infer_instance
246  · intro I _
247    exact eq_bot_or_eq_top I
248
249end MathlibAnnex.CStarAlgebra.CAR
Back to top ↑