MathlibAnnex/Analysis/CStarAlgebra/DirectSum/OrthogonalIdealAssembly.lean
Exact source · gss-v0.5.0
Fixed commit original · Raw UTF-8 source · Back to GSS Companion
Select a source link from a manuscript to highlight its exact range.
Technical identity
- Commit
ac405356bb98afed954da9b9c795d23cc8d5d149- SHA-256
68f9414a94aa4fc64b7979ba17a7faa1180f0004500474a21d6e7a1118391791- Bytes
- 26501
1/-2Copyright (c) 2026 Ryotaro Tanaka. All rights reserved.3Released under Apache 2.0 license as described in the file LICENSE.4Authors: Ryotaro Tanaka5-/6module78public import MathlibAnnex.Analysis.CStarAlgebra.DirectSum.C0DirectSum9public import MathlibAnnex.Analysis.CStarAlgebra.Ideal.ClosedStarIdeal10public import Mathlib.Analysis.CStarAlgebra.GelfandDuality11public import Mathlib.Analysis.Normed.Operator.Extend1213/-!14# Assembly of orthogonal closed C-star ideals as a c₀-direct sum1516Let `J i` be an arbitrary family of concrete norm-closed two-sided star ideals17in a nonunital complex C-star algebra `A`. If different ideals annihilate one18another, the ambient sum of a finitely supported family has norm equal to the19maximum of its coordinate norms. Consequently the finite-support summation20map extends uniquely to an isometric nonunital star-algebra homomorphism from21the actual completed dependent `C0DirectSum` into `A`.2223The range of this homomorphism is exactly the norm closure of the ambient24finite ideal sums. A star-algebra equivalence with `A` is therefore obtained25from the explicit boundary hypothesis that these finite sums are norm dense.26This file does not construct the ideal family and does not prove that density27hypothesis for a particular ambient algebra.2829No countability, separability, finiteness, or nonzero-fibre assumption is made.30The empty index type and zero ideals are included.31-/3233@[expose] public section3435set_option autoImplicit false36set_option maxHeartbeats 80000037noncomputable section3839open Function Set Topology40open scoped BigOperators CStarAlgebra ENNReal NNReal4142namespace MathlibAnnex.Analysis.CStarAlgebra4344universe uι uA4546variable {ι : Type uι} {A : Type uA} [NonUnitalCStarAlgebra A]4748namespace ClosedStarIdeal4950/-- The actual C-star algebra carried by one member of a family of closed51star ideals. -/52abbrev Fiber (J : ι → ClosedStarIdeal A) (i : ι) : Type uA :=53(J i).toNonUnitalStarSubalgebra5455/-- Different members of a family of concrete closed star ideals annihilate56one another in the ambient algebra. Since the quantification is ordered, the57same hypothesis also supplies the reverse product after swapping the indices.58-/59def PairwiseOrthogonal (J : ι → ClosedStarIdeal A) : Prop :=60∀ ⦃i j : ι⦄, i ≠ j → ∀ (x : Fiber J i) (y : Fiber J j),61(x : A) * (y : A) = 06263variable (J : ι → ClosedStarIdeal A)6465/-- The set of actual finite ambient sums with one term from each selected66ideal. Repetitions are unnecessary because every ideal is additively closed.67-/68def finiteSums : Set A :=69{a | ∃ (s : Finset ι) (x : ∀ i, Fiber J i),70a = ∑ i ∈ s, (x i : A)}7172@[simp]73theorem zero_mem_finiteSums : (0 : A) ∈ finiteSums J := by74classical75refine ⟨∅, fun i => 0, ?_⟩76simp7778/-- A two-term C-star norm computation used in the finite orthogonal-sum79induction. The four displayed cross terms are exactly what remains after80expanding `(a + b)⁎(a + b)` and the product of its two diagonal summands. -/81private theorem norm_add_eq_max_of_star_cross_eq_zero82{a b : A}83(hsab : star a * b = 0) (hsba : star b * a = 0)84(hasb : a * star b = 0) (hbsa : b * star a = 0) :85‖a + b‖ = max ‖a‖ ‖b‖ := by86let p : A := star a * a87let q : A := star b * b88have hpq : p * q = 0 := by89dsimp [p, q]90calc91(star a * a) * (star b * b) = star a * (a * star b) * b := by92simp only [mul_assoc]93_ = 0 := by rw [hasb]; simp94have hqp : q * p = 0 := by95dsimp [p, q]96calc97(star b * b) * (star a * a) = star b * (b * star a) * a := by98simp only [mul_assoc]99_ = 0 := by rw [hbsa]; simp100have hpq_comm : Commute p q := by101change p * q = q * p102rw [hpq, hqp]103have hp_normal : IsStarNormal p := by104dsimp [p]105exact (IsSelfAdjoint.star_mul_self a).isStarNormal106have hq_normal : IsStarNormal q := by107dsimp [q]108exact (IsSelfAdjoint.star_mul_self b).isStarNormal109have hdiag : star (a + b) * (a + b) = p + q := by110dsimp [p, q]111simp only [star_add, add_mul, mul_add]112rw [hsab, hsba]113abel114have hsq : ‖a + b‖ ^ 2 = max (‖a‖ ^ 2) (‖b‖ ^ 2) := by115calc116‖a + b‖ ^ 2 = ‖star (a + b) * (a + b)‖ := by117simpa only [pow_two] using118(CStarRing.norm_star_mul_self (x := a + b)).symm119_ = ‖p + q‖ := by rw [hdiag]120_ = max ‖p‖ ‖q‖ :=121hp_normal.norm_add_eq_max hq_normal hpq_comm hpq122_ = max (‖a‖ ^ 2) (‖b‖ ^ 2) := by123dsimp [p, q]124simp only [CStarRing.norm_star_mul_self, pow_two]125have hmaxsq : max (‖a‖ ^ 2) (‖b‖ ^ 2) = (max ‖a‖ ‖b‖) ^ 2 := by126rcases le_total ‖a‖ ‖b‖ with hab | hba127· have hs : ‖a‖ ^ 2 ≤ ‖b‖ ^ 2 := by128nlinarith [norm_nonneg a, norm_nonneg b]129simp [max_eq_right hab, max_eq_right hs]130· have hs : ‖b‖ ^ 2 ≤ ‖a‖ ^ 2 := by131nlinarith [norm_nonneg a, norm_nonneg b]132simp [max_eq_left hba, max_eq_left hs]133rw [hmaxsq] at hsq134have hmax_nonneg : 0 ≤ max ‖a‖ ‖b‖ :=135(norm_nonneg a).trans (le_max_left _ _)136nlinarith [norm_nonneg (a + b), hmax_nonneg]137138/-- The ambient norm of an actual finite sum from pairwise orthogonal ideals is139the supremum of the finitely many coordinate norms. -/140theorem nnnorm_sum_eq_sup (hJ : PairwiseOrthogonal J)141(s : Finset ι) (x : ∀ i, Fiber J i) :142‖∑ i ∈ s, (x i : A)‖₊ = s.sup fun i => ‖x i‖₊ := by143classical144induction s using Finset.induction with145| empty => simp146| @insert j s hj ih =>147have hsab : star (x j : A) * ∑ i ∈ s, (x i : A) = 0 := by148rw [Finset.mul_sum]149apply Finset.sum_eq_zero150intro i hi151have hji : j ≠ i := fun h => hj (h.symm ▸ hi)152simpa using hJ hji (star (x j)) (x i)153have hsba : star (∑ i ∈ s, (x i : A)) * (x j : A) = 0 := by154rw [star_sum, Finset.sum_mul]155apply Finset.sum_eq_zero156intro i hi157have hij : i ≠ j := fun h => hj (h ▸ hi)158simpa using hJ hij (star (x i)) (x j)159have hasb : (x j : A) * star (∑ i ∈ s, (x i : A)) = 0 := by160rw [star_sum, Finset.mul_sum]161apply Finset.sum_eq_zero162intro i hi163have hji : j ≠ i := fun h => hj (h.symm ▸ hi)164simpa using hJ hji (x j) (star (x i))165have hbsa : (∑ i ∈ s, (x i : A)) * star (x j : A) = 0 := by166rw [Finset.sum_mul]167apply Finset.sum_eq_zero168intro i hi169have hij : i ≠ j := fun h => hj (h ▸ hi)170simpa using hJ hij (x i) (star (x j))171have ih' : ‖∑ i ∈ s, (x i : A)‖ =172((s.sup fun i => ‖x i‖₊ : ℝ≥0) : ℝ) := by173simpa only [coe_nnnorm] using congrArg (fun t : ℝ≥0 => (t : ℝ)) ih174apply NNReal.eq175change ‖∑ i ∈ insert j s, (x i : A)‖ = ((insert j s).sup fun i => ‖x i‖₊ : ℝ≥0)176rw [Finset.sum_insert hj,177norm_add_eq_max_of_star_cross_eq_zero hsab hsba hasb hbsa,178Finset.sup_insert, NNReal.coe_max, ih']179rfl180181/-- Real-norm form of `nnnorm_sum_eq_sup`. -/182theorem norm_sum_eq_sup (hJ : PairwiseOrthogonal J)183(s : Finset ι) (x : ∀ i, Fiber J i) :184‖∑ i ∈ s, (x i : A)‖ = ((s.sup fun i => ‖x i‖₊ : ℝ≥0) : ℝ) := by185simpa only [coe_nnnorm] using congrArg (fun t : ℝ≥0 => (t : ℝ)) (nnnorm_sum_eq_sup J hJ s x)186187/-- Every finitely supported bounded family belongs to the actual completed188c₀-direct sum. -/189private theorem vanishesAtInfinity_of_finite_support190{x : lp (Fiber J) ∞} (hx : Set.Finite {i : ι | x i ≠ 0}) :191C0DirectSum.VanishesAtInfinity (Fiber J) x := by192intro ε hε193refine hx.subset ?_194intro i hi195change ε ≤ ‖x i‖ at hi196change x i ≠ 0197intro hxi198rw [hxi, norm_zero] at hi199exact (not_lt_of_ge hi) hε200201/-- The finitely supported star subalgebra embeds into the actual completed202c₀-direct sum without changing its underlying bounded family. -/203def finiteSupportInclusion :204C0DirectSum.finiteSupportStarSubalgebra (Fiber J) →⋆ₙₐ[ℂ]205C0DirectSum (Fiber J) where206toFun x := ⟨x.1, by exact vanishesAtInfinity_of_finite_support J x.2⟩207map_zero' := by apply Subtype.ext; rfl208map_add' := by intro x y; apply Subtype.ext; rfl209map_mul' := by intro x y; apply Subtype.ext; rfl210map_smul' := by intro c x; apply Subtype.ext; rfl211map_star' := by intro x; apply Subtype.ext; rfl212213@[simp]214theorem coe_finiteSupportInclusion215(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) :216(finiteSupportInclusion J x : lp (Fiber J) ∞) = x.1 := rfl217218@[simp]219theorem norm_finiteSupportInclusion220(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) :221‖finiteSupportInclusion J x‖ = ‖x‖ := rfl222223/-- The finite-support inclusion has dense range in the actual c₀-direct sum.224This statement is valid for arbitrary index types. -/225theorem denseRange_finiteSupportInclusion :226DenseRange (finiteSupportInclusion J) := by227classical228refine Metric.denseRange_iff.mpr ?_229intro x ε hε230obtain ⟨s, hs⟩ := C0DirectSum.exists_finset_norm_sub_truncate_lt231(Fiber J) x hε232let y : C0DirectSum.finiteSupportStarSubalgebra (Fiber J) :=233⟨(C0DirectSum.truncate (Fiber J) s x).1, by234change Set.Finite {i | (C0DirectSum.truncate (Fiber J) s x).1 i ≠ 0}235exact C0DirectSum.finite_support_truncate (Fiber J) s x⟩236have hy : finiteSupportInclusion J y = C0DirectSum.truncate (Fiber J) s x := rfl237refine ⟨y, ?_⟩238simpa only [hy, dist_eq_norm, norm_sub_rev] using hs239240/-- The exact finite support of a bounded family, viewed as a finset. -/241private def supportFinset242(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) : Finset ι :=243x.2.toFinset244245@[simp]246private theorem mem_supportFinset247(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) (i : ι) :248i ∈ supportFinset J x ↔ x.1 i ≠ 0 := by249classical250exact x.2.mem_toFinset251252/-- The ambient sum of one finitely supported family. -/253private def finiteSupportSumValue254(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) : A :=255∑ i ∈ supportFinset J x, (x.1 i : A)256257/-- The support finset in `finiteSupportSumValue` may be replaced by any258larger finset on which the family is zero off its exact support. -/259private theorem finiteSupportSumValue_eq_sum_of_support_subset260(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J))261(s : Finset ι) (hxs : supportFinset J x ⊆ s) :262finiteSupportSumValue J x = ∑ i ∈ s, (x.1 i : A) := by263classical264unfold finiteSupportSumValue265rw [Finset.sum_subset hxs]266intro i hi his267have hzero : x.1 i = 0 := by268by_contra hne269exact his ((mem_supportFinset J x i).2 hne)270simp [hzero]271272/-- The norm of a finitely supported bounded family is the supremum over its273exact finite support. -/274private theorem nnnorm_eq_support_sup275(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) :276‖x‖₊ = (supportFinset J x).sup fun i => ‖x.1 i‖₊ := by277classical278apply le_antisymm279· apply NNReal.coe_le_coe.mp280change ‖x.1‖ ≤ (((supportFinset J x).sup fun i => ‖x.1 i‖₊ : ℝ≥0) : ℝ)281refine lp.norm_le_of_forall_le (NNReal.coe_nonneg ((supportFinset J x).sup fun i => ‖x.1 i‖₊)) ?_282intro i283by_cases hi : x.1 i = 0284· simp [hi]285· change (‖x.1 i‖₊ : ℝ) ≤ _286exact NNReal.coe_le_coe.mpr (Finset.le_sup (f := fun i => ‖x.1 i‖₊) ((mem_supportFinset J x i).2 hi))287· apply Finset.sup_le288intro i hi289apply NNReal.coe_le_coe.mp290exact lp.norm_apply_le_norm (by simp) x.1 i291292/-- Finite-support summation into the ambient algebra. Orthogonality is used293only for multiplication; additivity, scalar compatibility, and star294compatibility are the ordinary finite-sum identities. -/295def finiteSupportSum (hJ : PairwiseOrthogonal J) :296C0DirectSum.finiteSupportStarSubalgebra (Fiber J) →⋆ₙₐ[ℂ] A where297toFun x := ∑ i ∈ x.2.toFinset, (x.1 i : A)298map_zero' := by299change finiteSupportSumValue J 0 = 0300simp [finiteSupportSumValue, supportFinset]301map_add' := by302intro x y303change finiteSupportSumValue J (x + y) = finiteSupportSumValue J x + finiteSupportSumValue J y304classical305let s := supportFinset J x ∪ supportFinset J y306have hxs : supportFinset J x ⊆ s := Finset.subset_union_left307have hys : supportFinset J y ⊆ s := Finset.subset_union_right308have hxys : supportFinset J (x + y) ⊆ s := by309intro i hi310have hxyne : x.1 i + y.1 i ≠ 0 :=311(mem_supportFinset J (x + y) i).1 hi312by_contra his313have hxi : x.1 i = 0 := by314by_contra hxne315exact his (Finset.mem_union_left _ ((mem_supportFinset J x i).2 hxne))316have hyi : y.1 i = 0 := by317by_contra hyne318exact his (Finset.mem_union_right _ ((mem_supportFinset J y i).2 hyne))319exact hxyne (by simp [hxi, hyi])320rw [finiteSupportSumValue_eq_sum_of_support_subset J (x + y) s hxys,321finiteSupportSumValue_eq_sum_of_support_subset J x s hxs,322finiteSupportSumValue_eq_sum_of_support_subset J y s hys]323change (∑ i ∈ s, ((x.1 i : A) + (y.1 i : A))) =324(∑ i ∈ s, (x.1 i : A)) + ∑ i ∈ s, (y.1 i : A)325rw [Finset.sum_add_distrib]326map_smul' := by327intro c x328change finiteSupportSumValue J (c • x) = c • finiteSupportSumValue J x329classical330have hsub : supportFinset J (c • x) ⊆ supportFinset J x := by331intro i hi332have hne : c • x.1 i ≠ 0 := (mem_supportFinset J (c • x) i).1 hi333by_contra hxi334have hzero : x.1 i = 0 := by335by_contra hxne336exact hxi ((mem_supportFinset J x i).2 hxne)337exact hne (by simp only [hzero, smul_zero])338rw [finiteSupportSumValue_eq_sum_of_support_subset J (c • x)339(supportFinset J x) hsub]340change (∑ i ∈ supportFinset J x, c • (x.1 i : A)) =341c • (∑ i ∈ supportFinset J x, (x.1 i : A))342rw [Finset.smul_sum]343map_star' := by344intro x345change finiteSupportSumValue J (star x) = star (finiteSupportSumValue J x)346classical347have hsub : supportFinset J (star x) ⊆ supportFinset J x := by348intro i hi349have hne : star (x.1 i) ≠ 0 := (mem_supportFinset J (star x) i).1 hi350by_contra hxi351have hzero : x.1 i = 0 := by352by_contra hxne353exact hxi ((mem_supportFinset J x i).2 hxne)354exact hne (by simp only [hzero, star_zero])355rw [finiteSupportSumValue_eq_sum_of_support_subset J (star x)356(supportFinset J x) hsub]357change (∑ i ∈ supportFinset J x, star (x.1 i : A)) =358star (∑ i ∈ supportFinset J x, (x.1 i : A))359rw [star_sum]360map_mul' := by361intro x y362change finiteSupportSumValue J (x * y) = finiteSupportSumValue J x * finiteSupportSumValue J y363classical364let s := supportFinset J x ∪ supportFinset J y365have hxs : supportFinset J x ⊆ s := Finset.subset_union_left366have hys : supportFinset J y ⊆ s := Finset.subset_union_right367have hxys : supportFinset J (x * y) ⊆ s := by368intro i hi369have hne : x.1 i * y.1 i ≠ 0 :=370(mem_supportFinset J (x * y) i).1 hi371by_contra his372have hxi : x.1 i = 0 := by373by_contra hxne374exact his (Finset.mem_union_left _ ((mem_supportFinset J x i).2 hxne))375exact hne (by simp [hxi])376rw [finiteSupportSumValue_eq_sum_of_support_subset J (x * y) s hxys,377finiteSupportSumValue_eq_sum_of_support_subset J x s hxs,378finiteSupportSumValue_eq_sum_of_support_subset J y s hys]379change (∑ i ∈ s, ((x.1 i : A) * (y.1 i : A))) =380(∑ i ∈ s, (x.1 i : A)) * ∑ i ∈ s, (y.1 i : A)381rw [Finset.sum_mul]382apply Finset.sum_congr rfl383intro i hi384rw [Finset.mul_sum]385rw [Finset.sum_eq_single i]386· intro j hj hji387simpa using hJ hji.symm (x.1 i) (y.1 j)388· exact fun hnot => (hnot hi).elim389390@[simp]391theorem finiteSupportSum_apply (hJ : PairwiseOrthogonal J)392(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) :393finiteSupportSum J hJ x = ∑ i ∈ x.2.toFinset, (x.1 i : A) := rfl394395private theorem nnnorm_finiteSupportSum (hJ : PairwiseOrthogonal J)396(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) :397‖finiteSupportSum J hJ x‖₊ = ‖x‖₊ := by398change ‖finiteSupportSumValue J x‖₊ = ‖x‖₊399rw [finiteSupportSumValue, nnnorm_sum_eq_sup J hJ]400exact (nnnorm_eq_support_sup J x).symm401402@[simp]403theorem norm_finiteSupportSum (hJ : PairwiseOrthogonal J)404(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) :405‖finiteSupportSum J hJ x‖ = ‖x‖ := by406simpa only [coe_nnnorm] using congrArg (fun t : ℝ≥0 => (t : ℝ)) (nnnorm_finiteSupportSum J hJ x)407408/-- The underlying continuous linear extension of finite-support summation to409the completed c₀-direct sum. -/410private def c0SumLinearMap (hJ : PairwiseOrthogonal J) :411C0DirectSum (Fiber J) →L[ℂ] A :=412({ toFun := finiteSupportSum J hJ, map_add' := map_add _, map_smul' := fun c x => by exact map_smul (finiteSupportSum J hJ) c x } : C0DirectSum.finiteSupportStarSubalgebra (Fiber J) →ₗ[ℂ] A).extendOfNorm413({ toFun := finiteSupportInclusion J, map_add' := map_add _, map_smul' := fun c x => by exact map_smul (finiteSupportInclusion J) c x } : C0DirectSum.finiteSupportStarSubalgebra (Fiber J) →ₗ[ℂ] C0DirectSum (Fiber J))414415@[simp]416private theorem c0SumLinearMap_finiteSupportInclusion417(hJ : PairwiseOrthogonal J)418(x : C0DirectSum.finiteSupportStarSubalgebra (Fiber J)) :419c0SumLinearMap J hJ (finiteSupportInclusion J x) =420finiteSupportSum J hJ x := by421apply LinearMap.extendOfNorm_eq422(f := ({ toFun := finiteSupportSum J hJ, map_add' := map_add _, map_smul' := fun c x => by exact map_smul (finiteSupportSum J hJ) c x } : C0DirectSum.finiteSupportStarSubalgebra (Fiber J) →ₗ[ℂ] A))423(e := ({ toFun := finiteSupportInclusion J, map_add' := map_add _, map_smul' := fun c x => by exact map_smul (finiteSupportInclusion J) c x } : C0DirectSum.finiteSupportStarSubalgebra (Fiber J) →ₗ[ℂ] C0DirectSum (Fiber J)))424(denseRange_finiteSupportInclusion J)425refine ⟨1, ?_⟩426intro y427change ‖finiteSupportSum J hJ y‖ ≤ 1 * ‖finiteSupportInclusion J y‖428rw [one_mul, norm_finiteSupportSum, norm_finiteSupportInclusion]429430/-- The extension remains norm preserving on the completed c₀-direct sum. -/431private theorem norm_c0SumLinearMap (hJ : PairwiseOrthogonal J)432(x : C0DirectSum (Fiber J)) :433‖c0SumLinearMap J hJ x‖ = ‖x‖ := by434have hdense : DenseRange (finiteSupportInclusion J) :=435denseRange_finiteSupportInclusion J436have hclosed : IsClosed {z : C0DirectSum (Fiber J) |437‖c0SumLinearMap J hJ z‖ = ‖z‖} :=438isClosed_eq (continuous_norm.comp (c0SumLinearMap J hJ).continuous) continuous_norm439refine DenseRange.induction_on hdense x hclosed ?_440intro y441rw [c0SumLinearMap_finiteSupportInclusion, norm_finiteSupportSum,442norm_finiteSupportInclusion]443444/-- The isometric nonunital star-algebra homomorphism from the actual completed445c₀-direct sum of a pairwise orthogonal ideal family into the ambient algebra.446-/447def c0SumHom (hJ : PairwiseOrthogonal J) :448C0DirectSum (Fiber J) →⋆ₙₐ[ℂ] A where449toFun := ({ toFun := finiteSupportSum J hJ, map_add' := map_add _, map_smul' := fun c x => by exact map_smul (finiteSupportSum J hJ) c x } : C0DirectSum.finiteSupportStarSubalgebra (Fiber J) →ₗ[ℂ] A).extendOfNorm ({ toFun := finiteSupportInclusion J, map_add' := map_add _, map_smul' := fun c x => by exact map_smul (finiteSupportInclusion J) c x } : C0DirectSum.finiteSupportStarSubalgebra (Fiber J) →ₗ[ℂ] C0DirectSum (Fiber J))450map_zero' := map_zero _451map_add' := map_add _452map_smul' := map_smul _453map_mul' := by454intro x y455change c0SumLinearMap J hJ (x * y) = c0SumLinearMap J hJ x * c0SumLinearMap J hJ y456have hdense : DenseRange (finiteSupportInclusion J) :=457denseRange_finiteSupportInclusion J458refine DenseRange.induction_on₂ hdense ?_ ?_ x y459· exact isClosed_eq460((c0SumLinearMap J hJ).continuous.comp continuous_mul)461(((c0SumLinearMap J hJ).continuous.comp continuous_fst).mul462((c0SumLinearMap J hJ).continuous.comp continuous_snd))463· intro u v464rw [← map_mul (finiteSupportInclusion J),465c0SumLinearMap_finiteSupportInclusion,466c0SumLinearMap_finiteSupportInclusion,467c0SumLinearMap_finiteSupportInclusion]468exact map_mul (finiteSupportSum J hJ) u v469map_star' := by470intro x471change c0SumLinearMap J hJ (star x) = star (c0SumLinearMap J hJ x)472have hdense : DenseRange (finiteSupportInclusion J) :=473denseRange_finiteSupportInclusion J474refine DenseRange.induction_on hdense x ?_ ?_475· exact isClosed_eq476((c0SumLinearMap J hJ).continuous.comp continuous_star)477(continuous_star.comp (c0SumLinearMap J hJ).continuous)478· intro y479rw [← map_star (finiteSupportInclusion J),480c0SumLinearMap_finiteSupportInclusion,481c0SumLinearMap_finiteSupportInclusion]482exact map_star (finiteSupportSum J hJ) y483484@[simp]485theorem norm_c0SumHom (hJ : PairwiseOrthogonal J)486(x : C0DirectSum (Fiber J)) :487‖c0SumHom J hJ x‖ = ‖x‖ :=488norm_c0SumLinearMap J hJ x489490/-- The completed orthogonal-ideal assembly map is an isometry. -/491theorem isometry_c0SumHom (hJ : PairwiseOrthogonal J) :492Isometry (c0SumHom J hJ) := by493rw [AddMonoidHomClass.isometry_iff_norm]494exact norm_c0SumHom J hJ495496/-- The completed orthogonal-ideal assembly map is injective. -/497theorem c0SumHom_injective (hJ : PairwiseOrthogonal J) :498Function.Injective (c0SumHom J hJ) :=499(isometry_c0SumHom J hJ).injective500501/-- A single c₀-coordinate is sent to the corresponding ambient ideal element.502-/503@[simp]504theorem c0SumHom_single (hJ : PairwiseOrthogonal J) (i : ι) (x : Fiber J i) :505c0SumHom J hJ (C0DirectSum.single (Fiber J) i x) = (x : A) := by506classical507let y : C0DirectSum.finiteSupportStarSubalgebra (Fiber J) :=508⟨(C0DirectSum.single (Fiber J) i x).1, by509refine Set.finite_singleton i |>.subset ?_510intro j hj511simp only [Set.mem_singleton_iff]512by_contra hji513have hz : C0DirectSum.eval (Fiber J) j514(C0DirectSum.single (Fiber J) i x) = 0 :=515C0DirectSum.eval_single_of_ne (Fiber J) hji x516exact hj (by simpa only [C0DirectSum.eval_apply] using hz)⟩517have hy : finiteSupportInclusion J y = C0DirectSum.single (Fiber J) i x := rfl518rw [← hy]519change c0SumLinearMap J hJ (finiteSupportInclusion J y) = (x : A)520rw [c0SumLinearMap_finiteSupportInclusion]521change finiteSupportSumValue J y = (x : A)522rw [finiteSupportSumValue_eq_sum_of_support_subset J y {i}]523· rw [Finset.sum_singleton]524change (C0DirectSum.eval (Fiber J) i525(C0DirectSum.single (Fiber J) i x) : A) = (x : A)526exact congrArg (fun z : Fiber J i => (z : A))527(C0DirectSum.eval_single_same (Fiber J) i x)528· intro j hj529have hjne : y.1 j ≠ 0 := (mem_supportFinset J y j).1 hj530by_contra hji531have hji' : j ≠ i := by simpa using hji532have hz : y.1 j = 0 := by533change C0DirectSum.eval (Fiber J) j534(C0DirectSum.single (Fiber J) i x) = 0535exact C0DirectSum.eval_single_of_ne (Fiber J) hji' x536exact hjne hz537538/-- Finite coordinate truncations are sent to the corresponding actual ambient539finite sums. -/540@[simp]541theorem c0SumHom_truncate (hJ : PairwiseOrthogonal J)542(s : Finset ι) (x : C0DirectSum (Fiber J)) :543c0SumHom J hJ (C0DirectSum.truncate (Fiber J) s x) =544∑ i ∈ s, (C0DirectSum.eval (Fiber J) i x : A) := by545simp only [C0DirectSum.truncate, map_sum, c0SumHom_single]546547/-- Every actual finite ideal sum lies in the range of the completed c₀548assembly map. -/549theorem finiteSums_subset_range_c0SumHom (hJ : PairwiseOrthogonal J) :550finiteSums J ⊆ Set.range (c0SumHom J hJ) := by551classical552rintro a ⟨s, x, rfl⟩553refine ⟨∑ i ∈ s, C0DirectSum.single (Fiber J) i (x i), ?_⟩554simp555556/-- The range of the completed c₀ assembly map is exactly the norm closure of557the actual finite ideal sums. -/558theorem range_c0SumHom_eq_closure_finiteSums (hJ : PairwiseOrthogonal J) :559Set.range (c0SumHom J hJ) = closure (finiteSums J) := by560apply Set.Subset.antisymm561· rintro _ ⟨x, rfl⟩562refine Metric.mem_closure_iff.mpr ?_563intro ε hε564obtain ⟨s, hs⟩ := C0DirectSum.exists_finset_norm_sub_truncate_lt565(Fiber J) x hε566refine ⟨c0SumHom J hJ (C0DirectSum.truncate (Fiber J) s x), ?_, ?_⟩567· refine ⟨s, fun i => C0DirectSum.eval (Fiber J) i x, ?_⟩568exact c0SumHom_truncate J hJ s x569· rw [dist_eq_norm, ← map_sub (c0SumHom J hJ), norm_c0SumHom]570exact hs571· apply closure_minimal (finiteSums_subset_range_c0SumHom J hJ)572exact (isometry_c0SumHom J hJ).isClosedEmbedding.isClosed_range573574/-- Explicit norm density of the actual finite ideal sums is precisely the575boundary hypothesis needed for surjectivity of the assembly map. -/576theorem c0SumHom_surjective (hJ : PairwiseOrthogonal J)577(hdense : Dense (finiteSums J)) :578Function.Surjective (c0SumHom J hJ) := by579intro a580have ha : a ∈ closure (finiteSums J) := by581rw [hdense.closure_eq]582exact Set.mem_univ a583rw [← range_c0SumHom_eq_closure_finiteSums J hJ] at ha584exact ha585586/-- The C-star equivalence obtained from a pairwise orthogonal ideal family and587the explicit hypothesis that its actual finite ambient sums are norm dense.588The theorem does not produce either the family or the density proof. -/589def c0SumEquivOfDense (hJ : PairwiseOrthogonal J)590(hdense : Dense (finiteSums J)) :591C0DirectSum (Fiber J) ≃⋆ₐ[ℂ] A :=592{ Equiv.ofBijective (c0SumHom J hJ)593⟨c0SumHom_injective J hJ, c0SumHom_surjective J hJ hdense⟩ with594map_add' := map_add (c0SumHom J hJ)595map_mul' := map_mul (c0SumHom J hJ)596map_smul' := map_smul (c0SumHom J hJ)597map_star' := map_star (c0SumHom J hJ) }598599@[simp]600theorem c0SumEquivOfDense_apply (hJ : PairwiseOrthogonal J)601(hdense : Dense (finiteSums J)) (x : C0DirectSum (Fiber J)) :602c0SumEquivOfDense J hJ hdense x = c0SumHom J hJ x := rfl603604@[simp]605theorem norm_c0SumEquivOfDense (hJ : PairwiseOrthogonal J)606(hdense : Dense (finiteSums J)) (x : C0DirectSum (Fiber J)) :607‖c0SumEquivOfDense J hJ hdense x‖ = ‖x‖ :=608norm_c0SumHom J hJ x609610end ClosedStarIdeal611612end MathlibAnnex.Analysis.CStarAlgebra