Theorem: StarAlgHomClass.ext_topologicalClosure
File: Mathlib/Topology/Algebra/StarSubalgebra.lean

tactic: have : (φ : S.topologicalClosure →⋆ₐ[R] B) = (ψ : S.topologicalClosure →⋆ₐ[R] B) := by
  refine StarAlgHom.ext_topologicalClosure (R := R) (A := A) (B := B) hφ hψ (StarAlgHom.ext ?_)
  simpa only [StarAlgHom.coe_comp, StarAlgHom.coe_coe] using h
state_before: R : Type u_3
A : Type u_4
B : Type u_1
inst✝¹⁴ : CommSemiring R
inst✝¹³ : StarRing R
inst✝¹² : TopologicalSpace A
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : StarRing A
inst✝⁸ : StarModule R A
inst✝⁷ : TopologicalSemiring A
inst✝⁶ : ContinuousStar A
inst✝⁵ : TopologicalSpace B
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
inst✝² : StarRing B
inst✝¹ : T2Space B
F : Type u_2
S : StarSubalgebra R A
inst✝ : StarAlgHomClass F R { x // x ∈ topologicalClosure S } B
φ ψ : F
hφ : Continuous ↑φ
hψ : Continuous ↑ψ
h :
  ∀ (x : { x // x ∈ S }),
    ↑φ (↑(inclusion (_ : S ≤ topologicalClosure S)) x) = ↑ψ (↑(inclusion (_ : S ≤ topologicalClosure S)) x)
⊢ φ = ψ

tactic: rw [FunLike.ext'_iff, ← StarAlgHom.coe_coe]
state_before: R : Type u_3
A : Type u_4
B : Type u_1
inst✝¹⁴ : CommSemiring R
inst✝¹³ : StarRing R
inst✝¹² : TopologicalSpace A
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : StarRing A
inst✝⁸ : StarModule R A
inst✝⁷ : TopologicalSemiring A
inst✝⁶ : ContinuousStar A
inst✝⁵ : TopologicalSpace B
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
inst✝² : StarRing B
inst✝¹ : T2Space B
F : Type u_2
S : StarSubalgebra R A
inst✝ : StarAlgHomClass F R { x // x ∈ topologicalClosure S } B
φ ψ : F
hφ : Continuous ↑φ
hψ : Continuous ↑ψ
h :
  ∀ (x : { x // x ∈ S }),
    ↑φ (↑(inclusion (_ : S ≤ topologicalClosure S)) x) = ↑ψ (↑(inclusion (_ : S ≤ topologicalClosure S)) x)
this :
  (let src := ↑φ;
    {
      toAlgHom :=
        {
          toRingHom :=
            {
              toMonoidHom :=
                { toOneHom := { toFun := ↑φ, map_one' := (_ : OneHom.toFun (↑↑↑↑φ) 1 = 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : { x // x ∈ topologicalClosure S }),
                        OneHom.toFun (↑↑↑↑φ) (x * y) = OneHom.toFun (↑↑↑↑φ) x * OneHom.toFun (↑↑↑↑φ) y) },
              map_zero' := (_ : OneHom.toFun (↑↑↑↑φ) 0 = 0),
              map_add' :=
                (_ :
                  ∀ (x y : { x // x ∈ topologicalClosure S }),
                    OneHom.toFun (↑↑↑↑φ) (x + y) = OneHom.toFun (↑↑↑↑φ) x + OneHom.toFun (↑↑↑↑φ) y) },
          commutes' :=
            (_ :
              ∀ (r : R),
                OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) = ↑(algebraMap R B) r) },
      map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑φ (star r) = star (↑φ r)) }) =
    let src := ↑ψ;
    {
      toAlgHom :=
        {
          toRingHom :=
            {
              toMonoidHom :=
                { toOneHom := { toFun := ↑ψ, map_one' := (_ : OneHom.toFun (↑↑↑↑ψ) 1 = 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : { x // x ∈ topologicalClosure S }),
                        OneHom.toFun (↑↑↑↑ψ) (x * y) = OneHom.toFun (↑↑↑↑ψ) x * OneHom.toFun (↑↑↑↑ψ) y) },
              map_zero' := (_ : OneHom.toFun (↑↑↑↑ψ) 0 = 0),
              map_add' :=
                (_ :
                  ∀ (x y : { x // x ∈ topologicalClosure S }),
                    OneHom.toFun (↑↑↑↑ψ) (x + y) = OneHom.toFun (↑↑↑↑ψ) x + OneHom.toFun (↑↑↑↑ψ) y) },
          commutes' :=
            (_ :
              ∀ (r : R),
                OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) = ↑(algebraMap R B) r) },
      map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑ψ (star r) = star (↑ψ r)) }
⊢ φ = ψ

tactic: apply congrArg _ this
state_before: R : Type u_3
A : Type u_4
B : Type u_1
inst✝¹⁴ : CommSemiring R
inst✝¹³ : StarRing R
inst✝¹² : TopologicalSpace A
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : StarRing A
inst✝⁸ : StarModule R A
inst✝⁷ : TopologicalSemiring A
inst✝⁶ : ContinuousStar A
inst✝⁵ : TopologicalSpace B
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
inst✝² : StarRing B
inst✝¹ : T2Space B
F : Type u_2
S : StarSubalgebra R A
inst✝ : StarAlgHomClass F R { x // x ∈ topologicalClosure S } B
φ ψ : F
hφ : Continuous ↑φ
hψ : Continuous ↑ψ
h :
  ∀ (x : { x // x ∈ S }),
    ↑φ (↑(inclusion (_ : S ≤ topologicalClosure S)) x) = ↑ψ (↑(inclusion (_ : S ≤ topologicalClosure S)) x)
this :
  (let src := ↑φ;
    {
      toAlgHom :=
        {
          toRingHom :=
            {
              toMonoidHom :=
                { toOneHom := { toFun := ↑φ, map_one' := (_ : OneHom.toFun (↑↑↑↑φ) 1 = 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : { x // x ∈ topologicalClosure S }),
                        OneHom.toFun (↑↑↑↑φ) (x * y) = OneHom.toFun (↑↑↑↑φ) x * OneHom.toFun (↑↑↑↑φ) y) },
              map_zero' := (_ : OneHom.toFun (↑↑↑↑φ) 0 = 0),
              map_add' :=
                (_ :
                  ∀ (x y : { x // x ∈ topologicalClosure S }),
                    OneHom.toFun (↑↑↑↑φ) (x + y) = OneHom.toFun (↑↑↑↑φ) x + OneHom.toFun (↑↑↑↑φ) y) },
          commutes' :=
            (_ :
              ∀ (r : R),
                OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) = ↑(algebraMap R B) r) },
      map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑φ (star r) = star (↑φ r)) }) =
    let src := ↑ψ;
    {
      toAlgHom :=
        {
          toRingHom :=
            {
              toMonoidHom :=
                { toOneHom := { toFun := ↑ψ, map_one' := (_ : OneHom.toFun (↑↑↑↑ψ) 1 = 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : { x // x ∈ topologicalClosure S }),
                        OneHom.toFun (↑↑↑↑ψ) (x * y) = OneHom.toFun (↑↑↑↑ψ) x * OneHom.toFun (↑↑↑↑ψ) y) },
              map_zero' := (_ : OneHom.toFun (↑↑↑↑ψ) 0 = 0),
              map_add' :=
                (_ :
                  ∀ (x y : { x // x ∈ topologicalClosure S }),
                    OneHom.toFun (↑↑↑↑ψ) (x + y) = OneHom.toFun (↑↑↑↑ψ) x + OneHom.toFun (↑↑↑↑ψ) y) },
          commutes' :=
            (_ :
              ∀ (r : R),
                OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) = ↑(algebraMap R B) r) },
      map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑ψ (star r) = star (↑ψ r)) }
⊢ ↑(let src := ↑φ;
      {
        toAlgHom :=
          {
            toRingHom :=
              {
                toMonoidHom :=
                  { toOneHom := { toFun := ↑φ, map_one' := (_ : OneHom.toFun (↑↑↑↑φ) 1 = 1) },
                    map_mul' :=
                      (_ :
                        ∀ (x y : { x // x ∈ topologicalClosure S }),
                          OneHom.toFun (↑↑↑↑φ) (x * y) = OneHom.toFun (↑↑↑↑φ) x * OneHom.toFun (↑↑↑↑φ) y) },
                map_zero' := (_ : OneHom.toFun (↑↑↑↑φ) 0 = 0),
                map_add' :=
                  (_ :
                    ∀ (x y : { x // x ∈ topologicalClosure S }),
                      OneHom.toFun (↑↑↑↑φ) (x + y) = OneHom.toFun (↑↑↑↑φ) x + OneHom.toFun (↑↑↑↑φ) y) },
            commutes' :=
              (_ :
                ∀ (r : R),
                  OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) = ↑(algebraMap R B) r) },
        map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑φ (star r) = star (↑φ r)) }) =
    ↑ψ

tactic: refine StarAlgHom.ext_topologicalClosure (R := R) (A := A) (B := B) hφ hψ (StarAlgHom.ext ?_)
state_before: R : Type u_3
A : Type u_4
B : Type u_1
inst✝¹⁴ : CommSemiring R
inst✝¹³ : StarRing R
inst✝¹² : TopologicalSpace A
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : StarRing A
inst✝⁸ : StarModule R A
inst✝⁷ : TopologicalSemiring A
inst✝⁶ : ContinuousStar A
inst✝⁵ : TopologicalSpace B
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
inst✝² : StarRing B
inst✝¹ : T2Space B
F : Type u_2
S : StarSubalgebra R A
inst✝ : StarAlgHomClass F R { x // x ∈ topologicalClosure S } B
φ ψ : F
hφ : Continuous ↑φ
hψ : Continuous ↑ψ
h :
  ∀ (x : { x // x ∈ S }),
    ↑φ (↑(inclusion (_ : S ≤ topologicalClosure S)) x) = ↑ψ (↑(inclusion (_ : S ≤ topologicalClosure S)) x)
⊢ (let src := ↑φ;
    {
      toAlgHom :=
        {
          toRingHom :=
            {
              toMonoidHom :=
                { toOneHom := { toFun := ↑φ, map_one' := (_ : OneHom.toFun (↑↑↑↑φ) 1 = 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : { x // x ∈ topologicalClosure S }),
                        OneHom.toFun (↑↑↑↑φ) (x * y) = OneHom.toFun (↑↑↑↑φ) x * OneHom.toFun (↑↑↑↑φ) y) },
              map_zero' := (_ : OneHom.toFun (↑↑↑↑φ) 0 = 0),
              map_add' :=
                (_ :
                  ∀ (x y : { x // x ∈ topologicalClosure S }),
                    OneHom.toFun (↑↑↑↑φ) (x + y) = OneHom.toFun (↑↑↑↑φ) x + OneHom.toFun (↑↑↑↑φ) y) },
          commutes' :=
            (_ :
              ∀ (r : R),
                OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) = ↑(algebraMap R B) r) },
      map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑φ (star r) = star (↑φ r)) }) =
    let src := ↑ψ;
    {
      toAlgHom :=
        {
          toRingHom :=
            {
              toMonoidHom :=
                { toOneHom := { toFun := ↑ψ, map_one' := (_ : OneHom.toFun (↑↑↑↑ψ) 1 = 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : { x // x ∈ topologicalClosure S }),
                        OneHom.toFun (↑↑↑↑ψ) (x * y) = OneHom.toFun (↑↑↑↑ψ) x * OneHom.toFun (↑↑↑↑ψ) y) },
              map_zero' := (_ : OneHom.toFun (↑↑↑↑ψ) 0 = 0),
              map_add' :=
                (_ :
                  ∀ (x y : { x // x ∈ topologicalClosure S }),
                    OneHom.toFun (↑↑↑↑ψ) (x + y) = OneHom.toFun (↑↑↑↑ψ) x + OneHom.toFun (↑↑↑↑ψ) y) },
          commutes' :=
            (_ :
              ∀ (r : R),
                OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) = ↑(algebraMap R B) r) },
      map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑ψ (star r) = star (↑ψ r)) }

tactic: simpa only [StarAlgHom.coe_comp, StarAlgHom.coe_coe] using h
state_before: R : Type u_3
A : Type u_4
B : Type u_1
inst✝¹⁴ : CommSemiring R
inst✝¹³ : StarRing R
inst✝¹² : TopologicalSpace A
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : StarRing A
inst✝⁸ : StarModule R A
inst✝⁷ : TopologicalSemiring A
inst✝⁶ : ContinuousStar A
inst✝⁵ : TopologicalSpace B
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
inst✝² : StarRing B
inst✝¹ : T2Space B
F : Type u_2
S : StarSubalgebra R A
inst✝ : StarAlgHomClass F R { x // x ∈ topologicalClosure S } B
φ ψ : F
hφ : Continuous ↑φ
hψ : Continuous ↑ψ
h :
  ∀ (x : { x // x ∈ S }),
    ↑φ (↑(inclusion (_ : S ≤ topologicalClosure S)) x) = ↑ψ (↑(inclusion (_ : S ≤ topologicalClosure S)) x)
⊢ ∀ (x : { x // x ∈ S }),
    ↑(StarAlgHom.comp
            (let src := ↑φ;
            {
              toAlgHom :=
                {
                  toRingHom :=
                    {
                      toMonoidHom :=
                        { toOneHom := { toFun := ↑φ, map_one' := (_ : OneHom.toFun (↑↑↑↑φ) 1 = 1) },
                          map_mul' :=
                            (_ :
                              ∀ (x y : { x // x ∈ topologicalClosure S }),
                                OneHom.toFun (↑↑↑↑φ) (x * y) = OneHom.toFun (↑↑↑↑φ) x * OneHom.toFun (↑↑↑↑φ) y) },
                      map_zero' := (_ : OneHom.toFun (↑↑↑↑φ) 0 = 0),
                      map_add' :=
                        (_ :
                          ∀ (x y : { x // x ∈ topologicalClosure S }),
                            OneHom.toFun (↑↑↑↑φ) (x + y) = OneHom.toFun (↑↑↑↑φ) x + OneHom.toFun (↑↑↑↑φ) y) },
                  commutes' :=
                    (_ :
                      ∀ (r : R),
                        OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) =
                          ↑(algebraMap R B) r) },
              map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑φ (star r) = star (↑φ r)) })
            (inclusion (_ : S ≤ topologicalClosure S)))
        x =
      ↑(StarAlgHom.comp
            (let src := ↑ψ;
            {
              toAlgHom :=
                {
                  toRingHom :=
                    {
                      toMonoidHom :=
                        { toOneHom := { toFun := ↑ψ, map_one' := (_ : OneHom.toFun (↑↑↑↑ψ) 1 = 1) },
                          map_mul' :=
                            (_ :
                              ∀ (x y : { x // x ∈ topologicalClosure S }),
                                OneHom.toFun (↑↑↑↑ψ) (x * y) = OneHom.toFun (↑↑↑↑ψ) x * OneHom.toFun (↑↑↑↑ψ) y) },
                      map_zero' := (_ : OneHom.toFun (↑↑↑↑ψ) 0 = 0),
                      map_add' :=
                        (_ :
                          ∀ (x y : { x // x ∈ topologicalClosure S }),
                            OneHom.toFun (↑↑↑↑ψ) (x + y) = OneHom.toFun (↑↑↑↑ψ) x + OneHom.toFun (↑↑↑↑ψ) y) },
                  commutes' :=
                    (_ :
                      ∀ (r : R),
                        OneHom.toFun (↑↑↑src) (↑(algebraMap R { x // x ∈ topologicalClosure S }) r) =
                          ↑(algebraMap R B) r) },
              map_star' := (_ : ∀ (r : { x // x ∈ topologicalClosure S }), ↑ψ (star r) = star (↑ψ r)) })
            (inclusion (_ : S ≤ topologicalClosure S)))
        x