[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
inst✝¹ : PartialOrder α
inst✝ : PriestleySpace α
x y : α
h : x ≠ y
⊢ ∃ U, IsClopen U ∧ (IsUpperSet U ∨ IsLowerSet U) ∧ x ∈ U ∧ ¬y ∈ U
[PROOFSTEP]
obtain h | h := h.not_le_or_not_le
[GOAL]
case inl
α : Type u_1
inst✝² : TopologicalSpace α
inst✝¹ : PartialOrder α
inst✝ : PriestleySpace α
x y : α
h✝ : x ≠ y
h : ¬x ≤ y
⊢ ∃ U, IsClopen U ∧ (IsUpperSet U ∨ IsLowerSet U) ∧ x ∈ U ∧ ¬y ∈ U
[PROOFSTEP]
exact (exists_clopen_upper_of_not_le h).imp fun _ ↦ And.imp_right <| And.imp_left Or.inl
[GOAL]
case inr
α : Type u_1
inst✝² : TopologicalSpace α
inst✝¹ : PartialOrder α
inst✝ : PriestleySpace α
x y : α
h✝ : x ≠ y
h : ¬y ≤ x
⊢ ∃ U, IsClopen U ∧ (IsUpperSet U ∨ IsLowerSet U) ∧ x ∈ U ∧ ¬y ∈ U
[PROOFSTEP]
obtain ⟨U, hU, hU', hy, hx⟩ := exists_clopen_lower_of_not_le h
[GOAL]
case inr.intro.intro.intro.intro
α : Type u_1
inst✝² : TopologicalSpace α
inst✝¹ : PartialOrder α
inst✝ : PriestleySpace α
x y : α
h✝ : x ≠ y
h : ¬y ≤ x
U : Set α
hU : IsClopen U
hU' : IsLowerSet U
hy : ¬y ∈ U
hx : x ∈ U
⊢ ∃ U, IsClopen U ∧ (IsUpperSet U ∨ IsLowerSet U) ∧ x ∈ U ∧ ¬y ∈ U
[PROOFSTEP]
exact ⟨U, hU, Or.inr hU', hx, hy⟩


[GOAL]
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
⊢ spectrum 𝕜 ↑u ⊆ Metric.sphere 0 1
[PROOFSTEP]
nontriviality E
[GOAL]
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
✝ : Nontrivial E
⊢ spectrum 𝕜 ↑u ⊆ Metric.sphere 0 1
[PROOFSTEP]
refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
[GOAL]
case refine'_1
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
✝ : Nontrivial E
k : 𝕜
hk : k ∈ spectrum 𝕜 ↑u
⊢ ‖k‖ ≤ 1
[PROOFSTEP]
simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
[GOAL]
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
✝ : Nontrivial E
k : 𝕜
hk : k ∈ spectrum 𝕜 ↑u
⊢ 1 ≤ ‖k‖
[PROOFSTEP]
rw [← unitary.toUnits_apply_val u] at hk
[GOAL]
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
✝ : Nontrivial E
k : 𝕜
hk : k ∈ spectrum 𝕜 ↑(↑toUnits u)
⊢ 1 ≤ ‖k‖
[PROOFSTEP]
have hnk := ne_zero_of_mem_of_unit hk
[GOAL]
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
✝ : Nontrivial E
k : 𝕜
hk : k ∈ spectrum 𝕜 ↑(↑toUnits u)
hnk : k ≠ 0
⊢ 1 ≤ ‖k‖
[PROOFSTEP]
rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
[GOAL]
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
✝ : Nontrivial E
k : 𝕜
hk : k⁻¹ ∈ spectrum 𝕜 ↑(↑toUnits u)⁻¹
hnk : k ≠ 0
⊢ 1 ≤ ‖k‖
[PROOFSTEP]
have : ‖k‖⁻¹ ≤ ‖(↑(unitary.toUnits u)⁻¹ : E)‖ := by simpa only [norm_inv] using norm_le_norm_of_mem hk
[GOAL]
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
✝ : Nontrivial E
k : 𝕜
hk : k⁻¹ ∈ spectrum 𝕜 ↑(↑toUnits u)⁻¹
hnk : k ≠ 0
⊢ ‖k‖⁻¹ ≤ ‖↑(↑toUnits u)⁻¹‖
[PROOFSTEP]
simpa only [norm_inv] using norm_le_norm_of_mem hk
[GOAL]
case refine'_2
𝕜 : Type u_1
inst✝⁵ : NormedField 𝕜
E : Type u_2
inst✝⁴ : NormedRing E
inst✝³ : StarRing E
inst✝² : CstarRing E
inst✝¹ : NormedAlgebra 𝕜 E
inst✝ : CompleteSpace E
u : { x // x ∈ unitary E }
✝ : Nontrivial E
k : 𝕜
hk : k⁻¹ ∈ spectrum 𝕜 ↑(↑toUnits u)⁻¹
hnk : k ≠ 0
this : ‖k‖⁻¹ ≤ ‖↑(↑toUnits u)⁻¹‖
⊢ 1 ≤ ‖k‖
[PROOFSTEP]
simpa [← Units.inv_eq_val_inv] using inv_le_of_inv_le (norm_pos_iff.mpr hnk) this
[GOAL]
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
⊢ spectralRadius ℂ a = ↑‖a‖₊
[PROOFSTEP]
have hconst : Tendsto (fun _n : ℕ => (‖a‖₊ : ℝ≥0∞)) atTop _ := tendsto_const_nhds
[GOAL]
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
hconst : Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 ↑‖a‖₊)
⊢ spectralRadius ℂ a = ↑‖a‖₊
[PROOFSTEP]
refine' tendsto_nhds_unique _ hconst
[GOAL]
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
hconst : Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 ↑‖a‖₊)
⊢ Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 (spectralRadius ℂ a))
[PROOFSTEP]
convert
  (spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a : A)).comp
    (Nat.tendsto_pow_atTop_atTop_of_one_lt one_lt_two) using
  1
[GOAL]
case h.e'_3
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
hconst : Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 ↑‖a‖₊)
⊢ (fun _n => ↑‖a‖₊) = (fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)) ∘ fun n => 2 ^ n
[PROOFSTEP]
refine' funext fun n => _
[GOAL]
case h.e'_3
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
hconst : Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 ↑‖a‖₊)
n : ℕ
⊢ ↑‖a‖₊ = ((fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)) ∘ fun n => 2 ^ n) n
[PROOFSTEP]
rw [Function.comp_apply, ha.nnnorm_pow_two_pow, ENNReal.coe_pow, ← rpow_nat_cast, ← rpow_mul]
[GOAL]
case h.e'_3
A : Type u_1
inst✝⁴ : NormedRing A
inst✝³ : NormedAlgebra ℂ A
inst✝² : CompleteSpace A
inst✝¹ : StarRing A
inst✝ : CstarRing A
a : A
ha : IsSelfAdjoint a
hconst : Tendsto (fun _n => ↑‖a‖₊) atTop (𝓝 ↑‖a‖₊)
n : ℕ
⊢ ↑‖a‖₊ = ↑‖a‖₊ ^ (↑(2 ^ n) * (1 / ↑(2 ^ n)))
[PROOFSTEP]
simp
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
a : A
inst✝ : IsStarNormal a
⊢ spectralRadius ℂ a = ↑‖a‖₊
[PROOFSTEP]
refine' (ENNReal.pow_strictMono two_ne_zero).injective _
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
a : A
inst✝ : IsStarNormal a
⊢ spectralRadius ℂ a ^ 2 = ↑‖a‖₊ ^ 2
[PROOFSTEP]
have heq :
  (fun n : ℕ => (‖(a⋆ * a) ^ n‖₊ : ℝ≥0∞) ^ (1 / n : ℝ)) =
    (fun x => x ^ 2) ∘ fun n : ℕ => (‖a ^ n‖₊ : ℝ≥0∞) ^ (1 / n : ℝ) :=
  by
  funext n
  rw [Function.comp_apply, ← rpow_nat_cast, ← rpow_mul, mul_comm, rpow_mul, rpow_nat_cast, ← coe_pow, sq, ←
    nnnorm_star_mul_self, Commute.mul_pow (star_comm_self' a), star_pow]
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
a : A
inst✝ : IsStarNormal a
⊢ (fun n => ↑‖(a⋆ * a) ^ n‖₊ ^ (1 / ↑n)) = (fun x => x ^ 2) ∘ fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)
[PROOFSTEP]
funext n
[GOAL]
case h
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
a : A
inst✝ : IsStarNormal a
n : ℕ
⊢ ↑‖(a⋆ * a) ^ n‖₊ ^ (1 / ↑n) = ((fun x => x ^ 2) ∘ fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)) n
[PROOFSTEP]
rw [Function.comp_apply, ← rpow_nat_cast, ← rpow_mul, mul_comm, rpow_mul, rpow_nat_cast, ← coe_pow, sq, ←
  nnnorm_star_mul_self, Commute.mul_pow (star_comm_self' a), star_pow]
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
a : A
inst✝ : IsStarNormal a
heq : (fun n => ↑‖(a⋆ * a) ^ n‖₊ ^ (1 / ↑n)) = (fun x => x ^ 2) ∘ fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)
⊢ spectralRadius ℂ a ^ 2 = ↑‖a‖₊ ^ 2
[PROOFSTEP]
have h₂ :=
  ((ENNReal.continuous_pow 2).tendsto (spectralRadius ℂ a)).comp
    (spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius a)
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
a : A
inst✝ : IsStarNormal a
heq : (fun n => ↑‖(a⋆ * a) ^ n‖₊ ^ (1 / ↑n)) = (fun x => x ^ 2) ∘ fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)
h₂ : Tendsto ((fun a => a ^ 2) ∘ fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)) atTop (𝓝 (spectralRadius ℂ a ^ 2))
⊢ spectralRadius ℂ a ^ 2 = ↑‖a‖₊ ^ 2
[PROOFSTEP]
rw [← heq] at h₂
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
a : A
inst✝ : IsStarNormal a
heq : (fun n => ↑‖(a⋆ * a) ^ n‖₊ ^ (1 / ↑n)) = (fun x => x ^ 2) ∘ fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)
h₂ : Tendsto (fun n => ↑‖(a⋆ * a) ^ n‖₊ ^ (1 / ↑n)) atTop (𝓝 (spectralRadius ℂ a ^ 2))
⊢ spectralRadius ℂ a ^ 2 = ↑‖a‖₊ ^ 2
[PROOFSTEP]
convert tendsto_nhds_unique h₂ (pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a⋆ * a))
[GOAL]
case h.e'_3
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
a : A
inst✝ : IsStarNormal a
heq : (fun n => ↑‖(a⋆ * a) ^ n‖₊ ^ (1 / ↑n)) = (fun x => x ^ 2) ∘ fun n => ↑‖a ^ n‖₊ ^ (1 / ↑n)
h₂ : Tendsto (fun n => ↑‖(a⋆ * a) ^ n‖₊ ^ (1 / ↑n)) atTop (𝓝 (spectralRadius ℂ a ^ 2))
⊢ ↑‖a‖₊ ^ 2 = spectralRadius ℂ (a⋆ * a)
[PROOFSTEP]
rw [(IsSelfAdjoint.star_mul_self a).spectralRadius_eq_nnnorm, sq, nnnorm_star_mul_self, coe_mul]
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
a : A
ha : IsSelfAdjoint a
z : ℂ
hz : z ∈ spectrum ℂ a
⊢ z = ↑z.re
[PROOFSTEP]
have hu := exp_mem_unitary_of_mem_skewAdjoint ℂ (ha.smul_mem_skewAdjoint conj_I)
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
a : A
ha : IsSelfAdjoint a
z : ℂ
hz : z ∈ spectrum ℂ a
hu : _root_.exp ℂ (I • a) ∈ unitary A
⊢ z = ↑z.re
[PROOFSTEP]
let Iu := Units.mk0 I I_ne_zero
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
a : A
ha : IsSelfAdjoint a
z : ℂ
hz : z ∈ spectrum ℂ a
hu : _root_.exp ℂ (I • a) ∈ unitary A
Iu : ℂˣ := Units.mk0 I I_ne_zero
⊢ z = ↑z.re
[PROOFSTEP]
have : _root_.exp ℂ (I • z) ∈ spectrum ℂ (_root_.exp ℂ (I • a)) := by
  simpa only [Units.smul_def, Units.val_mk0] using spectrum.exp_mem_exp (Iu • a) (smul_mem_smul_iff.mpr hz)
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
a : A
ha : IsSelfAdjoint a
z : ℂ
hz : z ∈ spectrum ℂ a
hu : _root_.exp ℂ (I • a) ∈ unitary A
Iu : ℂˣ := Units.mk0 I I_ne_zero
⊢ _root_.exp ℂ (I • z) ∈ spectrum ℂ (_root_.exp ℂ (I • a))
[PROOFSTEP]
simpa only [Units.smul_def, Units.val_mk0] using spectrum.exp_mem_exp (Iu • a) (smul_mem_smul_iff.mpr hz)
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
a : A
ha : IsSelfAdjoint a
z : ℂ
hz : z ∈ spectrum ℂ a
hu : _root_.exp ℂ (I • a) ∈ unitary A
Iu : ℂˣ := Units.mk0 I I_ne_zero
this : _root_.exp ℂ (I • z) ∈ spectrum ℂ (_root_.exp ℂ (I • a))
⊢ z = ↑z.re
[PROOFSTEP]
exact
  Complex.ext (ofReal_re _) <| by
    simpa only [← Complex.exp_eq_exp_ℂ, mem_sphere_zero_iff_norm, norm_eq_abs, abs_exp, Real.exp_eq_one_iff,
      smul_eq_mul, I_mul, neg_eq_zero] using spectrum.subset_circle_of_unitary hu this
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
a : A
ha : IsSelfAdjoint a
z : ℂ
hz : z ∈ spectrum ℂ a
hu : _root_.exp ℂ (I • a) ∈ unitary A
Iu : ℂˣ := Units.mk0 I I_ne_zero
this : _root_.exp ℂ (I • z) ∈ spectrum ℂ (_root_.exp ℂ (I • a))
⊢ z.im = (↑z.re).im
[PROOFSTEP]
simpa only [← Complex.exp_eq_exp_ℂ, mem_sphere_zero_iff_norm, norm_eq_abs, abs_exp, Real.exp_eq_one_iff, smul_eq_mul,
  I_mul, neg_eq_zero] using spectrum.subset_circle_of_unitary hu this
[GOAL]
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
a : A
ha : IsSelfAdjoint a
z : ℂ
⊢ z ∈ ofReal' ∘ re '' spectrum ℂ a → z ∈ spectrum ℂ a
[PROOFSTEP]
rintro ⟨z, hz, rfl⟩
[GOAL]
case intro.intro
A : Type u_1
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
a : A
ha : IsSelfAdjoint a
z : ℂ
hz : z ∈ spectrum ℂ a
⊢ (ofReal' ∘ re) z ∈ spectrum ℂ a
[PROOFSTEP]
simpa only [(ha.mem_spectrum_eq_re hz).symm, Function.comp_apply] using hz
[GOAL]
F : Type u_1
A : Type u_2
B : Type u_3
inst✝⁹ : NormedRing A
inst✝⁸ : NormedAlgebra ℂ A
inst✝⁷ : CompleteSpace A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : NormedRing B
inst✝³ : NormedAlgebra ℂ B
inst✝² : CompleteSpace B
inst✝¹ : StarRing B
inst✝ : CstarRing B
hF : StarAlgHomClass F ℂ A B
φ : F
a : A
⊢ ‖↑φ a‖₊ ≤ ‖a‖₊
[PROOFSTEP]
suffices ∀ s : A, IsSelfAdjoint s → ‖φ s‖₊ ≤ ‖s‖₊ by
  exact
    nonneg_le_nonneg_of_sq_le_sq zero_le' <| by
      simpa only [nnnorm_star_mul_self, map_star, map_mul] using this _ (IsSelfAdjoint.star_mul_self a)
[GOAL]
F : Type u_1
A : Type u_2
B : Type u_3
inst✝⁹ : NormedRing A
inst✝⁸ : NormedAlgebra ℂ A
inst✝⁷ : CompleteSpace A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : NormedRing B
inst✝³ : NormedAlgebra ℂ B
inst✝² : CompleteSpace B
inst✝¹ : StarRing B
inst✝ : CstarRing B
hF : StarAlgHomClass F ℂ A B
φ : F
a : A
this : ∀ (s : A), IsSelfAdjoint s → ‖↑φ s‖₊ ≤ ‖s‖₊
⊢ ‖↑φ a‖₊ ≤ ‖a‖₊
[PROOFSTEP]
exact
  nonneg_le_nonneg_of_sq_le_sq zero_le' <| by
    simpa only [nnnorm_star_mul_self, map_star, map_mul] using this _ (IsSelfAdjoint.star_mul_self a)
[GOAL]
F : Type u_1
A : Type u_2
B : Type u_3
inst✝⁹ : NormedRing A
inst✝⁸ : NormedAlgebra ℂ A
inst✝⁷ : CompleteSpace A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : NormedRing B
inst✝³ : NormedAlgebra ℂ B
inst✝² : CompleteSpace B
inst✝¹ : StarRing B
inst✝ : CstarRing B
hF : StarAlgHomClass F ℂ A B
φ : F
a : A
this : ∀ (s : A), IsSelfAdjoint s → ‖↑φ s‖₊ ≤ ‖s‖₊
⊢ ‖↑φ a‖₊ * ‖↑φ a‖₊ ≤ ‖a‖₊ * ‖a‖₊
[PROOFSTEP]
simpa only [nnnorm_star_mul_self, map_star, map_mul] using this _ (IsSelfAdjoint.star_mul_self a)
[GOAL]
F : Type u_1
A : Type u_2
B : Type u_3
inst✝⁹ : NormedRing A
inst✝⁸ : NormedAlgebra ℂ A
inst✝⁷ : CompleteSpace A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : NormedRing B
inst✝³ : NormedAlgebra ℂ B
inst✝² : CompleteSpace B
inst✝¹ : StarRing B
inst✝ : CstarRing B
hF : StarAlgHomClass F ℂ A B
φ : F
a : A
⊢ ∀ (s : A), IsSelfAdjoint s → ‖↑φ s‖₊ ≤ ‖s‖₊
[PROOFSTEP]
intro s hs
[GOAL]
F : Type u_1
A : Type u_2
B : Type u_3
inst✝⁹ : NormedRing A
inst✝⁸ : NormedAlgebra ℂ A
inst✝⁷ : CompleteSpace A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : NormedRing B
inst✝³ : NormedAlgebra ℂ B
inst✝² : CompleteSpace B
inst✝¹ : StarRing B
inst✝ : CstarRing B
hF : StarAlgHomClass F ℂ A B
φ : F
a s : A
hs : IsSelfAdjoint s
⊢ ‖↑φ s‖₊ ≤ ‖s‖₊
[PROOFSTEP]
simpa only [hs.spectralRadius_eq_nnnorm, (hs.starHom_apply φ).spectralRadius_eq_nnnorm, coe_le_coe] using
  show spectralRadius ℂ (φ s) ≤ spectralRadius ℂ s from iSup_le_iSup_of_subset (AlgHom.spectrum_apply_subset φ s)
[GOAL]
F : Type u_1
A : Type u_2
B : Type u_3
inst✝⁹ : NormedRing A
inst✝⁸ : NormedAlgebra ℂ A
inst✝⁷ : CompleteSpace A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : NormedRing B
inst✝³ : NormedAlgebra ℂ B
inst✝² : CompleteSpace B
inst✝¹ : StarRing B
inst✝ : CstarRing B
hF : StarAlgHomClass F ℂ A B
φ✝ : F
src✝ : LinearMapClass F ℂ A B := AlgHomClass.linearMapClass
φ : F
⊢ ∀ (x : A), ‖↑φ x‖ ≤ 1 * ‖x‖
[PROOFSTEP]
simpa only [one_mul] using nnnorm_apply_le φ
[GOAL]
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
⊢ ↑φ a⋆ = (↑φ a)⋆
[PROOFSTEP]
suffices hsa : ∀ s : selfAdjoint A, (φ s)⋆ = φ s
[GOAL]
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
hsa : ∀ (s : { x // x ∈ selfAdjoint A }), (↑φ ↑s)⋆ = ↑φ ↑s
⊢ ↑φ a⋆ = (↑φ a)⋆
[PROOFSTEP]
rw [← realPart_add_I_smul_imaginaryPart a]
[GOAL]
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
hsa : ∀ (s : { x // x ∈ selfAdjoint A }), (↑φ ↑s)⋆ = ↑φ ↑s
⊢ ↑φ (↑(↑ℜ a) + I • ↑(↑ℑ a))⋆ = (↑φ (↑(↑ℜ a) + I • ↑(↑ℑ a)))⋆
[PROOFSTEP]
simp only [map_add, map_smul, star_add, star_smul, hsa, selfAdjoint.star_val_eq]
[GOAL]
case hsa
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
⊢ ∀ (s : { x // x ∈ selfAdjoint A }), (↑φ ↑s)⋆ = ↑φ ↑s
[PROOFSTEP]
intro s
[GOAL]
case hsa
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
s : { x // x ∈ selfAdjoint A }
⊢ (↑φ ↑s)⋆ = ↑φ ↑s
[PROOFSTEP]
have := AlgHom.apply_mem_spectrum φ (s : A)
[GOAL]
case hsa
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
s : { x // x ∈ selfAdjoint A }
this : ↑φ ↑s ∈ spectrum ℂ ↑s
⊢ (↑φ ↑s)⋆ = ↑φ ↑s
[PROOFSTEP]
rw [selfAdjoint.val_re_map_spectrum s] at this
[GOAL]
case hsa
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
s : { x // x ∈ selfAdjoint A }
this : ↑φ ↑s ∈ ofReal' ∘ re '' spectrum ℂ ↑s
⊢ (↑φ ↑s)⋆ = ↑φ ↑s
[PROOFSTEP]
rcases this with ⟨⟨_, _⟩, _, heq⟩
[GOAL]
case hsa.intro.mk.intro
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
s : { x // x ∈ selfAdjoint A }
re✝ im✝ : ℝ
left✝ : { re := re✝, im := im✝ } ∈ spectrum ℂ ↑s
heq : (ofReal' ∘ re) { re := re✝, im := im✝ } = ↑φ ↑s
⊢ (↑φ ↑s)⋆ = ↑φ ↑s
[PROOFSTEP]
simp only [Function.comp_apply] at heq
[GOAL]
case hsa.intro.mk.intro
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
s : { x // x ∈ selfAdjoint A }
re✝ im✝ : ℝ
left✝ : { re := re✝, im := im✝ } ∈ spectrum ℂ ↑s
heq : ↑re✝ = ↑φ ↑s
⊢ (↑φ ↑s)⋆ = ↑φ ↑s
[PROOFSTEP]
rw [← heq, IsROrC.star_def]
[GOAL]
case hsa.intro.mk.intro
F : Type u_1
A : Type u_2
inst✝⁵ : NormedRing A
inst✝⁴ : NormedAlgebra ℂ A
inst✝³ : CompleteSpace A
inst✝² : StarRing A
inst✝¹ : CstarRing A
inst✝ : StarModule ℂ A
hF : AlgHomClass F ℂ A ℂ
φ : F
a : A
s : { x // x ∈ selfAdjoint A }
re✝ im✝ : ℝ
left✝ : { re := re✝, im := im✝ } ∈ spectrum ℂ ↑s
heq : ↑re✝ = ↑φ ↑s
⊢ ↑(starRingEnd ((fun x => ℂ) ↑s)) ↑re✝ = ↑re✝
[PROOFSTEP]
exact IsROrC.conj_ofReal _


[GOAL]
α✝ : Sort u_1
β✝ : Sort u_2
γ : Sort u_3
p✝ q✝ : α✝ → Prop
α β : Sort u_4
p : α → Prop
q : β → Prop
a : { x // p x }
b : { y // q y }
h : α = β
h' : HEq p q
⊢ HEq a b ↔ HEq ↑a ↑b
[PROOFSTEP]
subst h
[GOAL]
α✝ : Sort u_1
β : Sort u_2
γ : Sort u_3
p✝ q✝ : α✝ → Prop
α : Sort u_4
p : α → Prop
a : { x // p x }
q : α → Prop
b : { y // q y }
h' : HEq p q
⊢ HEq a b ↔ HEq ↑a ↑b
[PROOFSTEP]
subst h'
[GOAL]
α✝ : Sort u_1
β : Sort u_2
γ : Sort u_3
p✝ q : α✝ → Prop
α : Sort u_4
p : α → Prop
a b : { y // p y }
⊢ HEq a b ↔ HEq ↑a ↑b
[PROOFSTEP]
rw [heq_iff_eq, heq_iff_eq, ext_iff]
[GOAL]
α : Sort u_1
β : Sort u_2
γ : Sort u_3
p q : α → Prop
a : Subtype p
b : α
⊢ (∃ h, { val := b, property := h } = a) ↔ b = ↑a
[PROOFSTEP]
simp only [@eq_comm _ b, exists_eq_subtype_mk_iff, @eq_comm _ _ a]
[GOAL]
α✝ : Sort u_1
β✝ : Sort u_2
γ : Sort u_3
p✝ q : α✝ → Prop
α : Sort u_5
β : α → Type u_4
f : (x : α) → β x
p : α → Prop
x : Subtype p
⊢ restrict p f x = f ↑x
[PROOFSTEP]
rfl
[GOAL]
α✝ : Sort u_1
β✝ : Sort u_2
γ : Sort u_3
p✝ q : α✝ → Prop
α : Sort u_5
β : α → Type u_4
ne : ∀ (a : α), Nonempty (β a)
p : α → Prop
⊢ Surjective fun f => restrict p f
[PROOFSTEP]
letI := Classical.decPred p
[GOAL]
α✝ : Sort u_1
β✝ : Sort u_2
γ : Sort u_3
p✝ q : α✝ → Prop
α : Sort u_5
β : α → Type u_4
ne : ∀ (a : α), Nonempty (β a)
p : α → Prop
this : DecidablePred p := Classical.decPred p
⊢ Surjective fun f => restrict p f
[PROOFSTEP]
refine' fun f ↦ ⟨fun x ↦ if h : p x then f ⟨x, h⟩ else Nonempty.some (ne x), funext <| _⟩
[GOAL]
α✝ : Sort u_1
β✝ : Sort u_2
γ : Sort u_3
p✝ q : α✝ → Prop
α : Sort u_5
β : α → Type u_4
ne : ∀ (a : α), Nonempty (β a)
p : α → Prop
this : DecidablePred p := Classical.decPred p
f : (x : Subtype p) → β ↑x
⊢ ∀ (x : Subtype p),
    (fun f => restrict p f)
        (fun x => if h : p x then f { val := x, property := h } else Nonempty.some (_ : Nonempty (β x))) x =
      f x
[PROOFSTEP]
rintro ⟨x, hx⟩
[GOAL]
case mk
α✝ : Sort u_1
β✝ : Sort u_2
γ : Sort u_3
p✝ q : α✝ → Prop
α : Sort u_5
β : α → Type u_4
ne : ∀ (a : α), Nonempty (β a)
p : α → Prop
this : DecidablePred p := Classical.decPred p
f : (x : Subtype p) → β ↑x
x : α
hx : p x
⊢ (fun f => restrict p f)
      (fun x => if h : p x then f { val := x, property := h } else Nonempty.some (_ : Nonempty (β x)))
      { val := x, property := hx } =
    f { val := x, property := hx }
[PROOFSTEP]
exact dif_pos hx
[GOAL]
α✝ : Sort u_1
β✝ : Sort u_2
γ : Sort u_3
p✝ q : α✝ → Prop
α : Sort u_4
β : Sort u_5
f : α → β
p : β → Prop
h : ∀ (a : α), p (f a)
hf : Injective f
x y : α
hxy : coind f h x = coind f h y
⊢ f x = f y
[PROOFSTEP]
apply congr_arg Subtype.val hxy


[GOAL]
R : Type u_1
inst✝¹ : Semigroup R
inst✝ : StarSemigroup R
a : R
s : Set R
ha : a ∈ center R
⊢ star a ∈ center R
[PROOFSTEP]
simpa only [star_mul, star_star] using fun g => congr_arg star ((Set.mem_center_iff R).mp ha <| star g).symm
[GOAL]
R : Type u_1
inst✝¹ : Semigroup R
inst✝ : StarSemigroup R
a : R
s : Set R
h : ∀ (a : R), a ∈ s → star a ∈ s
ha : a ∈ centralizer s
y : R
hy : y ∈ s
⊢ y * star a = star a * y
[PROOFSTEP]
simpa using congr_arg star (ha _ (h _ hy)).symm


[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
c : V
x y : P
⊢ dist (c +ᵥ x) (c +ᵥ y) = dist x y
[PROOFSTEP]
rw [NormedAddTorsor.dist_eq_norm', NormedAddTorsor.dist_eq_norm', vadd_vsub_vadd_cancel_left]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
v₁ v₂ : V
x : P
⊢ dist (v₁ +ᵥ x) (v₂ +ᵥ x) = dist v₁ v₂
[PROOFSTEP]
rw [dist_eq_norm_vsub V, dist_eq_norm, vadd_vsub_vadd_cancel_right]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
v : V
x : P
⊢ dist (v +ᵥ x) x = ‖v‖
[PROOFSTEP]
rw [dist_eq_norm_vsub V _ x, vadd_vsub]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
v : V
x : P
⊢ dist x (v +ᵥ x) = ‖v‖
[PROOFSTEP]
rw [dist_comm, dist_vadd_left]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
x y z : P
⊢ dist (x -ᵥ y) (x -ᵥ z) = dist y z
[PROOFSTEP]
rw [dist_eq_norm, vsub_sub_vsub_cancel_left, dist_comm, dist_eq_norm_vsub V]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
v v' : V
p p' : P
⊢ dist (v +ᵥ p) (v' +ᵥ p') ≤ dist v v' + dist p p'
[PROOFSTEP]
simpa [(dist_vadd_cancel_right)] using dist_triangle (v +ᵥ p) (v' +ᵥ p) (v' +ᵥ p')
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
p₁ p₂ p₃ p₄ : P
⊢ dist (p₁ -ᵥ p₂) (p₃ -ᵥ p₄) ≤ dist p₁ p₃ + dist p₂ p₄
[PROOFSTEP]
rw [dist_eq_norm, vsub_sub_vsub_comm, dist_eq_norm_vsub V, dist_eq_norm_vsub V]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
p₁ p₂ p₃ p₄ : P
⊢ ‖p₁ -ᵥ p₃ - (p₂ -ᵥ p₄)‖ ≤ ‖p₁ -ᵥ p₃‖ + ‖p₂ -ᵥ p₄‖
[PROOFSTEP]
exact norm_sub_le _ _
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
p₁ p₂ p₃ p₄ : P
⊢ nndist (p₁ -ᵥ p₂) (p₃ -ᵥ p₄) ≤ nndist p₁ p₃ + nndist p₂ p₄
[PROOFSTEP]
simp only [← NNReal.coe_le_coe, NNReal.coe_add, ← dist_nndist, (dist_vsub_vsub_le)]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
v v' : V
p p' : P
⊢ edist (v +ᵥ p) (v' +ᵥ p') ≤ edist v v' + edist p p'
[PROOFSTEP]
simp only [edist_nndist]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
v v' : V
p p' : P
⊢ ↑(nndist (v +ᵥ p) (v' +ᵥ p')) ≤ ↑(nndist v v') + ↑(nndist p p')
[PROOFSTEP]
norm_cast
  -- porting note: was apply_mod_cast
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
v v' : V
p p' : P
⊢ nndist (v +ᵥ p) (v' +ᵥ p') ≤ nndist v v' + nndist p p'
[PROOFSTEP]
apply dist_vadd_vadd_le
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
p₁ p₂ p₃ p₄ : P
⊢ edist (p₁ -ᵥ p₂) (p₃ -ᵥ p₄) ≤ edist p₁ p₃ + edist p₂ p₄
[PROOFSTEP]
simp only [edist_nndist]
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
p₁ p₂ p₃ p₄ : P
⊢ ↑(nndist (p₁ -ᵥ p₂) (p₃ -ᵥ p₄)) ≤ ↑(nndist p₁ p₃) + ↑(nndist p₂ p₄)
[PROOFSTEP]
norm_cast
  -- porting note: was apply_mod_cast
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
p₁ p₂ p₃ p₄ : P
⊢ nndist (p₁ -ᵥ p₂) (p₃ -ᵥ p₄) ≤ nndist p₁ p₃ + nndist p₂ p₄
[PROOFSTEP]
apply dist_vsub_vsub_le
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : SeminormedAddCommGroup V
inst✝ : AddTorsor V P
x : P
⊢ dist x x = 0
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : SeminormedAddCommGroup V
inst✝ : AddTorsor V P
x y : P
⊢ dist x y = dist y x
[PROOFSTEP]
simp only [← neg_vsub_eq_vsub_rev y x, norm_neg]
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : SeminormedAddCommGroup V
inst✝ : AddTorsor V P
x y z : P
⊢ dist x z ≤ dist x y + dist y z
[PROOFSTEP]
change ‖x -ᵥ z‖ ≤ ‖x -ᵥ y‖ + ‖y -ᵥ z‖
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : SeminormedAddCommGroup V
inst✝ : AddTorsor V P
x y z : P
⊢ ‖x -ᵥ z‖ ≤ ‖x -ᵥ y‖ + ‖y -ᵥ z‖
[PROOFSTEP]
rw [← vsub_add_vsub_cancel]
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : SeminormedAddCommGroup V
inst✝ : AddTorsor V P
x y z : P
⊢ ‖x -ᵥ ?p2 + (?p2 -ᵥ z)‖ ≤ ‖x -ᵥ y‖ + ‖y -ᵥ z‖
case p2
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : SeminormedAddCommGroup V
inst✝ : AddTorsor V P
x y z : P
⊢ P
[PROOFSTEP]
apply norm_add_le
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : SeminormedAddCommGroup V
inst✝ : AddTorsor V P
x✝¹ x✝ : P
⊢ (fun x y => ↑{ val := ‖x -ᵥ y‖, property := (_ : 0 ≤ ‖x -ᵥ y‖) }) x✝¹ x✝ = ENNReal.ofReal (dist x✝¹ x✝)
[PROOFSTEP]
simp only [← ENNReal.ofReal_eq_coe_nnreal]
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x : P
⊢ dist x x = 0
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x y : P
⊢ dist x y = dist y x
[PROOFSTEP]
simp only [← neg_vsub_eq_vsub_rev y x, norm_neg]
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x y z : P
⊢ dist x z ≤ dist x y + dist y z
[PROOFSTEP]
change ‖x -ᵥ z‖ ≤ ‖x -ᵥ y‖ + ‖y -ᵥ z‖
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x y z : P
⊢ ‖x -ᵥ z‖ ≤ ‖x -ᵥ y‖ + ‖y -ᵥ z‖
[PROOFSTEP]
rw [← vsub_add_vsub_cancel]
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x y z : P
⊢ ‖x -ᵥ ?p2 + (?p2 -ᵥ z)‖ ≤ ‖x -ᵥ y‖ + ‖y -ᵥ z‖
case p2
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x y z : P
⊢ P
[PROOFSTEP]
apply norm_add_le
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x✝¹ x✝ : P
⊢ (fun x y => ↑{ val := ‖x -ᵥ y‖, property := (_ : 0 ≤ ‖x -ᵥ y‖) }) x✝¹ x✝ = ENNReal.ofReal (dist x✝¹ x✝)
[PROOFSTEP]
simp only
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x✝¹ x✝ : P
⊢ ↑{ val := ‖x✝¹ -ᵥ x✝‖, property := (_ : 0 ≤ ‖x✝¹ -ᵥ x✝‖) } = ENNReal.ofReal ‖x✝¹ -ᵥ x✝‖
[PROOFSTEP]
rw [ENNReal.ofReal_eq_coe_nnreal]
[GOAL]
α : Type u_1
V✝ : Type u_2
P✝ : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁷ : SeminormedAddCommGroup V✝
inst✝⁶ : PseudoMetricSpace P✝
inst✝⁵ : NormedAddTorsor V✝ P✝
inst✝⁴ : NormedAddCommGroup W
inst✝³ : MetricSpace Q
inst✝² : NormedAddTorsor W Q
V : Type u_6
P : Type u_7
inst✝¹ : NormedAddCommGroup V
inst✝ : AddTorsor V P
x✝ y✝ : P
h : dist x✝ y✝ = 0
⊢ x✝ = y✝
[PROOFSTEP]
simpa using h
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
s : Set V
t : Set P
hs : IsClosed s
ht : IsCompact t
⊢ IsClosed (s +ᵥ t)
[PROOFSTEP]
refine IsSeqClosed.isClosed (fun u p husv hup ↦ ?_)
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
s : Set V
t : Set P
hs : IsClosed s
ht : IsCompact t
u : ℕ → P
p : P
husv : ∀ (n : ℕ), u n ∈ s +ᵥ t
hup : Tendsto u atTop (𝓝 p)
⊢ p ∈ s +ᵥ t
[PROOFSTEP]
choose! a v hav using husv
[GOAL]
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
s : Set V
t : Set P
hs : IsClosed s
ht : IsCompact t
u : ℕ → P
p : P
hup : Tendsto u atTop (𝓝 p)
a : ℕ → V
v : ℕ → P
hav : ∀ (n : ℕ), a n ∈ s ∧ v n ∈ t ∧ (fun x x_1 => x +ᵥ x_1) (a n) (v n) = u n
⊢ p ∈ s +ᵥ t
[PROOFSTEP]
rcases ht.isSeqCompact fun n ↦ (hav n).2.1 with ⟨q, hqt, φ, φ_mono, hφq⟩
[GOAL]
case intro.intro.intro.intro
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
s : Set V
t : Set P
hs : IsClosed s
ht : IsCompact t
u : ℕ → P
p : P
hup : Tendsto u atTop (𝓝 p)
a : ℕ → V
v : ℕ → P
hav : ∀ (n : ℕ), a n ∈ s ∧ v n ∈ t ∧ (fun x x_1 => x +ᵥ x_1) (a n) (v n) = u n
q : P
hqt : q ∈ t
φ : ℕ → ℕ
φ_mono : StrictMono φ
hφq : Tendsto ((fun n => v n) ∘ φ) atTop (𝓝 q)
⊢ p ∈ s +ᵥ t
[PROOFSTEP]
refine
  ⟨p -ᵥ q, q, hs.mem_of_tendsto ((hup.comp φ_mono.tendsto_atTop).vsub hφq) (eventually_of_forall fun n ↦ ?_), hqt,
    vsub_vadd _ _⟩
[GOAL]
case intro.intro.intro.intro
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
s : Set V
t : Set P
hs : IsClosed s
ht : IsCompact t
u : ℕ → P
p : P
hup : Tendsto u atTop (𝓝 p)
a : ℕ → V
v : ℕ → P
hav : ∀ (n : ℕ), a n ∈ s ∧ v n ∈ t ∧ (fun x x_1 => x +ᵥ x_1) (a n) (v n) = u n
q : P
hqt : q ∈ t
φ : ℕ → ℕ
φ_mono : StrictMono φ
hφq : Tendsto ((fun n => v n) ∘ φ) atTop (𝓝 q)
n : ℕ
⊢ (u ∘ φ -ᵥ (fun n => v n) ∘ φ) n ∈ s
[PROOFSTEP]
convert (hav (φ n)).1 using 1
[GOAL]
case h.e'_4
α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁵ : SeminormedAddCommGroup V
inst✝⁴ : PseudoMetricSpace P
inst✝³ : NormedAddTorsor V P
inst✝² : NormedAddCommGroup W
inst✝¹ : MetricSpace Q
inst✝ : NormedAddTorsor W Q
s : Set V
t : Set P
hs : IsClosed s
ht : IsCompact t
u : ℕ → P
p : P
hup : Tendsto u atTop (𝓝 p)
a : ℕ → V
v : ℕ → P
hav : ∀ (n : ℕ), a n ∈ s ∧ v n ∈ t ∧ (fun x x_1 => x +ᵥ x_1) (a n) (v n) = u n
q : P
hqt : q ∈ t
φ : ℕ → ℕ
φ_mono : StrictMono φ
hφq : Tendsto ((fun n => v n) ∘ φ) atTop (𝓝 q)
n : ℕ
⊢ (u ∘ φ -ᵥ (fun n => v n) ∘ φ) n = a (φ n)
[PROOFSTEP]
exact (eq_vadd_iff_vsub_eq _ _ _).mp (hav (φ n)).2.2.symm


[GOAL]
M : Type u_1
inst✝ : MulOneClass M
⊢ 1 ∈ center M
[PROOFSTEP]
simp [mem_center_iff]
[GOAL]
M : Type u_1
inst✝ : MulZeroClass M
⊢ 0 ∈ center M
[PROOFSTEP]
simp [mem_center_iff]
[GOAL]
M : Type u_1
inst✝ : Semigroup M
a b : M
ha : a ∈ center M
hb : b ∈ center M
g : M
⊢ g * (a * b) = a * b * g
[PROOFSTEP]
rw [mul_assoc, ← hb g, ← mul_assoc, ha g, mul_assoc]
[GOAL]
M : Type u_1
inst✝ : Group M
a : M
ha : a ∈ center M
g : M
⊢ g * a⁻¹ = a⁻¹ * g
[PROOFSTEP]
rw [← inv_inj, mul_inv_rev, inv_inv, ← ha, mul_inv_rev, inv_inv]
[GOAL]
M : Type u_1
inst✝ : Distrib M
a b : M
ha : a ∈ center M
hb : b ∈ center M
c : M
⊢ c * (a + b) = (a + b) * c
[PROOFSTEP]
rw [add_mul, mul_add, ha c, hb c]
[GOAL]
M : Type u_1
inst✝ : NonUnitalNonAssocRing M
a : M
ha : a ∈ center M
c : M
⊢ c * -a = -a * c
[PROOFSTEP]
rw [← neg_mul_comm, ha (-c), neg_mul_comm]
[GOAL]
M : Type u_1
inst✝ : GroupWithZero M
a : Mˣ
ha : a ∈ center Mˣ
b : M
⊢ b * ↑a = ↑a * b
[PROOFSTEP]
obtain rfl | hb := eq_or_ne b 0
[GOAL]
case inl
M : Type u_1
inst✝ : GroupWithZero M
a : Mˣ
ha : a ∈ center Mˣ
⊢ 0 * ↑a = ↑a * 0
[PROOFSTEP]
rw [zero_mul, mul_zero]
[GOAL]
case inr
M : Type u_1
inst✝ : GroupWithZero M
a : Mˣ
ha : a ∈ center Mˣ
b : M
hb : b ≠ 0
⊢ b * ↑a = ↑a * b
[PROOFSTEP]
exact Units.ext_iff.mp (ha (Units.mk0 _ hb))
[GOAL]
M : Type u_1
inst✝ : GroupWithZero M
a : M
ha : a ∈ center M
⊢ a⁻¹ ∈ center M
[PROOFSTEP]
obtain rfl | ha0 := eq_or_ne a 0
[GOAL]
case inl
M : Type u_1
inst✝ : GroupWithZero M
ha : 0 ∈ center M
⊢ 0⁻¹ ∈ center M
[PROOFSTEP]
rw [inv_zero]
[GOAL]
case inl
M : Type u_1
inst✝ : GroupWithZero M
ha : 0 ∈ center M
⊢ 0 ∈ center M
[PROOFSTEP]
exact zero_mem_center M
[GOAL]
case inr
M : Type u_1
inst✝ : GroupWithZero M
a : M
ha : a ∈ center M
ha0 : a ≠ 0
⊢ a⁻¹ ∈ center M
[PROOFSTEP]
rcases IsUnit.mk0 _ ha0 with ⟨a, rfl⟩
[GOAL]
case inr.intro
M : Type u_1
inst✝ : GroupWithZero M
a : Mˣ
ha : ↑a ∈ center M
ha0 : ↑a ≠ 0
⊢ (↑a)⁻¹ ∈ center M
[PROOFSTEP]
rw [← Units.val_inv_eq_inv_val]
[GOAL]
case inr.intro
M : Type u_1
inst✝ : GroupWithZero M
a : Mˣ
ha : ↑a ∈ center M
ha0 : ↑a ≠ 0
⊢ ↑a⁻¹ ∈ center M
[PROOFSTEP]
exact center_units_subset (inv_mem_center (subset_center_units ha))
[GOAL]
M : Type u_1
inst✝ : Group M
a b : M
ha : a ∈ center M
hb : b ∈ center M
⊢ a / b ∈ center M
[PROOFSTEP]
rw [div_eq_mul_inv]
[GOAL]
M : Type u_1
inst✝ : Group M
a b : M
ha : a ∈ center M
hb : b ∈ center M
⊢ a * b⁻¹ ∈ center M
[PROOFSTEP]
exact mul_mem_center ha (inv_mem_center hb)
[GOAL]
M : Type u_1
inst✝ : GroupWithZero M
a b : M
ha : a ∈ center M
hb : b ∈ center M
⊢ a / b ∈ center M
[PROOFSTEP]
rw [div_eq_mul_inv]
[GOAL]
M : Type u_1
inst✝ : GroupWithZero M
a b : M
ha : a ∈ center M
hb : b ∈ center M
⊢ a * b⁻¹ ∈ center M
[PROOFSTEP]
exact mul_mem_center ha (inv_mem_center₀ hb)