Theorem: gelfandTransform_bijective
File: Mathlib/Analysis/CstarAlgebra/GelfandDuality.lean

Proof steps:
state_before: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
⊢ Function.Bijective ⇑(gelfandTransform ℂ A)
state_after: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
⊢ Function.Surjective ⇑(gelfandTransform ℂ A)
tactic: refine ⟨(gelfandTransform_isometry A).injective, ?_⟩
state_before: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
⊢ Function.Surjective ⇑(gelfandTransform ℂ A)
state_after: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
⊢ Function.Surjective ⇑(gelfandTransform ℂ A)
tactic: let rng : StarSubalgebra ℂ C(characterSpace ℂ A, ℂ) :=
    { toSubalgebra := (gelfandTransform ℂ A).range
      star_mem' := by
        rintro - ⟨a, rfl⟩
        use star a
        ext1 φ
        dsimp
        simp only [map_star, RCLike.star_def] }
state_before: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
⊢ Function.Surjective ⇑(gelfandTransform ℂ A)
state_after: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
⊢ rng = ⊤
tactic: suffices rng = ⊤ from
    fun x => show x ∈ rng from this.symm ▸ StarSubalgebra.mem_top
state_before: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
⊢ rng = ⊤
state_after: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
h : rng.topologicalClosure = rng
⊢ rng = ⊤
tactic: have h : rng.topologicalClosure = rng := le_antisymm
    (StarSubalgebra.topologicalClosure_minimal le_rfl
      (gelfandTransform_isometry A).closedEmbedding.isClosed_range)
    (StarSubalgebra.le_topologicalClosure _)
state_before: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
h : rng.topologicalClosure = rng
⊢ rng = ⊤
state_after: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
h : rng.topologicalClosure = rng
x✝¹ x✝ : ↑(characterSpace ℂ A)
⊢ x✝¹ ≠ x✝ → ∃ f ∈ (fun f => ⇑f) '' ↑rng.toSubalgebra, f x✝¹ ≠ f x✝
tactic: refine h ▸ ContinuousMap.starSubalgebra_topologicalClosure_eq_top_of_separatesPoints
    _ (fun _ _ => ?_)
state_before: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
h : rng.topologicalClosure = rng
x✝¹ x✝ : ↑(characterSpace ℂ A)
⊢ x✝¹ ≠ x✝ → ∃ f ∈ (fun f => ⇑f) '' ↑rng.toSubalgebra, f x✝¹ ≠ f x✝
state_after: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
h : rng.topologicalClosure = rng
x✝¹ x✝ : ↑(characterSpace ℂ A)
⊢ (∀ f ∈ (fun f => ⇑f) '' ↑rng.toSubalgebra, f x✝¹ = f x✝) → x✝¹ = x✝
tactic: contrapose!
state_before: A : Type u_1
inst✝⁵ : NormedCommRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
rng : StarSubalgebra ℂ C(↑(characterSpace ℂ A), ℂ) := { toSubalgebra := (gelfandTransform ℂ A).range, star_mem' := ⋯ }
h : rng.topologicalClosure = rng
x✝¹ x✝ : ↑(characterSpace ℂ A)
⊢ (∀ f ∈ (fun f => ⇑f) '' ↑rng.toSubalgebra, f x✝¹ = f x✝) → x✝¹ = x✝
state_after: no goals
tactic: exact fun h => Subtype.ext (ContinuousLinearMap.ext fun a =>
    h (gelfandTransform ℂ A a) ⟨gelfandTransform ℂ A a, ⟨a, rfl⟩, rfl⟩)