analysis.normed_space.star.spectrum
⟷
Mathlib.Analysis.NormedSpace.Star.Spectrum
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -212,7 +212,7 @@ noncomputable instance (priority := 100) : StarHomClass F A ℂ
have := AlgHom.apply_mem_spectrum φ (s : A)
rw [selfAdjoint.val_re_map_spectrum s] at this
rcases this with ⟨⟨_, _⟩, _, heq⟩
- rw [← HEq, IsROrC.star_def, IsROrC.conj_ofReal]
+ rw [← HEq, RCLike.star_def, RCLike.conj_ofReal]
#print AlgHomClass.instStarAlgHomClass /-
/-- This is not an instance to avoid type class inference loops. See
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -37,9 +37,9 @@ theorem unitary.spectrum_subset_circle (u : unitary E) : spectrum 𝕜 (u : E)
nontriviality E
refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
· simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
- · rw [← unitary.coe_toUnits_apply u] at hk
+ · rw [← unitary.coe_toUnits_apply u] at hk
have hnk := ne_zero_of_mem_of_unit hk
- rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
+ rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
have : ‖k‖⁻¹ ≤ ‖↑(unitary.toUnits u)⁻¹‖; simpa only [norm_inv] using norm_le_norm_of_mem hk
simpa using inv_le_of_inv_le (norm_pos_iff.mpr hnk) this
#align unitary.spectrum_subset_circle unitary.spectrum_subset_circle
@@ -93,7 +93,7 @@ theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
have h₂ :=
((ENNReal.continuous_pow 2).Tendsto (spectralRadius ℂ a)).comp
(spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius a)
- rw [← HEq] at h₂
+ rw [← HEq] at h₂
convert tendsto_nhds_unique h₂ (pow_nnnorm_pow_one_div_tendsto_nhds_spectral_radius (a⋆ * a))
rw [(IsSelfAdjoint.star_mul_self a).spectralRadius_eq_nnnorm, sq, nnnorm_star_mul_self, coe_mul]
#align is_star_normal.spectral_radius_eq_nnnorm IsStarNormal.spectralRadius_eq_nnnorm
@@ -210,7 +210,7 @@ noncomputable instance (priority := 100) : StarHomClass F A ℂ
simp only [map_add, map_smul, star_add, star_smul, hsa, selfAdjoint.star_val_eq]
· intro s
have := AlgHom.apply_mem_spectrum φ (s : A)
- rw [selfAdjoint.val_re_map_spectrum s] at this
+ rw [selfAdjoint.val_re_map_spectrum s] at this
rcases this with ⟨⟨_, _⟩, _, heq⟩
rw [← HEq, IsROrC.star_def, IsROrC.conj_ofReal]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -203,7 +203,7 @@ See note [lower instance priority] -/
noncomputable instance (priority := 100) : StarHomClass F A ℂ
where
coe φ := φ
- coe_injective' := FunLike.coe_injective'
+ coe_injective' := DFunLike.coe_injective'
map_star φ a := by
suffices hsa : ∀ s : selfAdjoint A, (φ s)⋆ = φ s
· rw [← realPart_add_I_smul_imaginaryPart a]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -104,9 +104,9 @@ theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
theorem IsSelfAdjoint.mem_spectrum_eq_re [StarModule ℂ A] {a : A} (ha : IsSelfAdjoint a) {z : ℂ}
(hz : z ∈ spectrum ℂ a) : z = z.re :=
by
- have hu := exp_mem_unitary_of_mem_skewAdjoint ℂ (ha.smul_mem_skew_adjoint conj_I)
+ have hu := NormedSpace.exp_mem_unitary_of_mem_skewAdjoint ℂ (ha.smul_mem_skew_adjoint conj_I)
let Iu := Units.mk0 I I_ne_zero
- have : exp ℂ (I • z) ∈ spectrum ℂ (exp ℂ (I • a)) := by
+ have : NormedSpace.exp ℂ (I • z) ∈ spectrum ℂ (NormedSpace.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)
exact
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2022 Jireh Loreaux. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
-/
-import Mathbin.Analysis.NormedSpace.Star.Basic
-import Mathbin.Analysis.NormedSpace.Spectrum
-import Mathbin.Analysis.SpecialFunctions.Exponential
-import Mathbin.Algebra.Star.StarAlgHom
+import Analysis.NormedSpace.Star.Basic
+import Analysis.NormedSpace.Spectrum
+import Analysis.SpecialFunctions.Exponential
+import Algebra.Star.StarAlgHom
#align_import analysis.normed_space.star.spectrum from "leanprover-community/mathlib"@"087c325ae0ab42dbdd5dee55bc37d3d5a0bf2197"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2022 Jireh Loreaux. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
-
-! This file was ported from Lean 3 source module analysis.normed_space.star.spectrum
-! leanprover-community/mathlib commit 087c325ae0ab42dbdd5dee55bc37d3d5a0bf2197
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.NormedSpace.Star.Basic
import Mathbin.Analysis.NormedSpace.Spectrum
import Mathbin.Analysis.SpecialFunctions.Exponential
import Mathbin.Algebra.Star.StarAlgHom
+#align_import analysis.normed_space.star.spectrum from "leanprover-community/mathlib"@"087c325ae0ab42dbdd5dee55bc37d3d5a0bf2197"
+
/-! # Spectral properties in C⋆-algebras
> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -21,7 +21,6 @@ In this file, we establish various properties related to the spectrum of element
-/
--- mathport name: «expr ⋆»
local postfix:max "⋆" => star
section
@@ -35,6 +34,7 @@ section UnitarySpectrum
variable {𝕜 : Type _} [NormedField 𝕜] {E : Type _} [NormedRing E] [StarRing E] [CstarRing E]
[NormedAlgebra 𝕜 E] [CompleteSpace E]
+#print unitary.spectrum_subset_circle /-
theorem unitary.spectrum_subset_circle (u : unitary E) : spectrum 𝕜 (u : E) ⊆ Metric.sphere 0 1 :=
by
nontriviality E
@@ -46,11 +46,14 @@ theorem unitary.spectrum_subset_circle (u : unitary E) : spectrum 𝕜 (u : E)
have : ‖k‖⁻¹ ≤ ‖↑(unitary.toUnits u)⁻¹‖; simpa only [norm_inv] using norm_le_norm_of_mem hk
simpa using inv_le_of_inv_le (norm_pos_iff.mpr hnk) this
#align unitary.spectrum_subset_circle unitary.spectrum_subset_circle
+-/
+#print spectrum.subset_circle_of_unitary /-
theorem spectrum.subset_circle_of_unitary {u : E} (h : u ∈ unitary E) :
spectrum 𝕜 u ⊆ Metric.sphere 0 1 :=
unitary.spectrum_subset_circle ⟨u, h⟩
#align spectrum.subset_circle_of_unitary spectrum.subset_circle_of_unitary
+-/
end UnitarySpectrum
@@ -61,9 +64,9 @@ open Complex
variable {A : Type _} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
[CstarRing A]
--- mathport name: «expr↑ₐ»
local notation "↑ₐ" => algebraMap ℂ A
+#print IsSelfAdjoint.spectralRadius_eq_nnnorm /-
theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
spectralRadius ℂ a = ‖a‖₊ :=
by
@@ -76,7 +79,9 @@ theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
rw [Function.comp_apply, ha.nnnorm_pow_two_pow, ENNReal.coe_pow, ← rpow_nat_cast, ← rpow_mul]
simp
#align is_self_adjoint.spectral_radius_eq_nnnorm IsSelfAdjoint.spectralRadius_eq_nnnorm
+-/
+#print IsStarNormal.spectralRadius_eq_nnnorm /-
theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
spectralRadius ℂ a = ‖a‖₊ :=
by
@@ -95,7 +100,9 @@ theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
convert tendsto_nhds_unique h₂ (pow_nnnorm_pow_one_div_tendsto_nhds_spectral_radius (a⋆ * a))
rw [(IsSelfAdjoint.star_mul_self a).spectralRadius_eq_nnnorm, sq, nnnorm_star_mul_self, coe_mul]
#align is_star_normal.spectral_radius_eq_nnnorm IsStarNormal.spectralRadius_eq_nnnorm
+-/
+#print IsSelfAdjoint.mem_spectrum_eq_re /-
/-- Any element of the spectrum of a selfadjoint is real. -/
theorem IsSelfAdjoint.mem_spectrum_eq_re [StarModule ℂ A] {a : A} (ha : IsSelfAdjoint a) {z : ℂ}
(hz : z ∈ spectrum ℂ a) : z = z.re :=
@@ -112,13 +119,17 @@ theorem IsSelfAdjoint.mem_spectrum_eq_re [StarModule ℂ A] {a : A} (ha : IsSelf
Real.exp_eq_one_iff, smul_eq_mul, I_mul, neg_eq_zero] using
spectrum.subset_circle_of_unitary hu this)
#align is_self_adjoint.mem_spectrum_eq_re IsSelfAdjoint.mem_spectrum_eq_re
+-/
+#print selfAdjoint.mem_spectrum_eq_re /-
/-- Any element of the spectrum of a selfadjoint is real. -/
theorem selfAdjoint.mem_spectrum_eq_re [StarModule ℂ A] (a : selfAdjoint A) {z : ℂ}
(hz : z ∈ spectrum ℂ (a : A)) : z = z.re :=
a.Prop.mem_spectrum_eq_re hz
#align self_adjoint.mem_spectrum_eq_re selfAdjoint.mem_spectrum_eq_re
+-/
+#print IsSelfAdjoint.val_re_map_spectrum /-
/-- The spectrum of a selfadjoint is real -/
theorem IsSelfAdjoint.val_re_map_spectrum [StarModule ℂ A] {a : A} (ha : IsSelfAdjoint a) :
spectrum ℂ a = (coe ∘ re '' spectrum ℂ a : Set ℂ) :=
@@ -127,12 +138,15 @@ theorem IsSelfAdjoint.val_re_map_spectrum [StarModule ℂ A] {a : A} (ha : IsSel
rintro ⟨z, hz, rfl⟩
simpa only [(ha.mem_spectrum_eq_re hz).symm, Function.comp_apply] using hz
#align is_self_adjoint.coe_re_map_spectrum IsSelfAdjoint.val_re_map_spectrum
+-/
+#print selfAdjoint.val_re_map_spectrum /-
/-- The spectrum of a selfadjoint is real -/
theorem selfAdjoint.val_re_map_spectrum [StarModule ℂ A] (a : selfAdjoint A) :
spectrum ℂ (a : A) = (coe ∘ re '' spectrum ℂ (a : A) : Set ℂ) :=
a.property.val_re_map_spectrum
#align self_adjoint.coe_re_map_spectrum selfAdjoint.val_re_map_spectrum
+-/
end ComplexScalars
@@ -142,8 +156,7 @@ variable {F A B : Type _} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A]
[CstarRing A] [NormedRing B] [NormedAlgebra ℂ B] [CompleteSpace B] [StarRing B] [CstarRing B]
[hF : StarAlgHomClass F ℂ A B] (φ : F)
-include hF
-
+#print StarAlgHom.nnnorm_apply_le /-
/-- A star algebra homomorphism of complex C⋆-algebras is norm contractive. -/
theorem nnnorm_apply_le (a : A) : ‖(φ a : B)‖₊ ≤ ‖a‖₊ :=
by
@@ -159,11 +172,14 @@ theorem nnnorm_apply_le (a : A) : ‖(φ a : B)‖₊ ≤ ‖a‖₊ :=
show spectralRadius ℂ (φ s) ≤ spectralRadius ℂ s from
iSup_le_iSup_of_subset (AlgHom.spectrum_apply_subset φ s)
#align star_alg_hom.nnnorm_apply_le StarAlgHom.nnnorm_apply_le
+-/
+#print StarAlgHom.norm_apply_le /-
/-- A star algebra homomorphism of complex C⋆-algebras is norm contractive. -/
theorem norm_apply_le (a : A) : ‖(φ a : B)‖ ≤ ‖a‖ :=
nnnorm_apply_le φ a
#align star_alg_hom.norm_apply_le StarAlgHom.norm_apply_le
+-/
/-- Star algebra homomorphisms between C⋆-algebras are continuous linear maps.
See note [lower instance priority] -/
@@ -185,8 +201,6 @@ open scoped ComplexStarModule
variable {F A : Type _} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
[CstarRing A] [StarModule ℂ A] [hF : AlgHomClass F ℂ A ℂ]
-include hF
-
/-- This instance is provided instead of `star_alg_hom_class` to avoid type class inference loops.
See note [lower instance priority] -/
noncomputable instance (priority := 100) : StarHomClass F A ℂ
@@ -203,13 +217,13 @@ noncomputable instance (priority := 100) : StarHomClass F A ℂ
rcases this with ⟨⟨_, _⟩, _, heq⟩
rw [← HEq, IsROrC.star_def, IsROrC.conj_ofReal]
+#print AlgHomClass.instStarAlgHomClass /-
/-- This is not an instance to avoid type class inference loops. See
`weak_dual.complex.star_hom_class`. -/
noncomputable def AlgHomClass.instStarAlgHomClass : StarAlgHomClass F ℂ A ℂ :=
{ WeakDual.Complex.starHomClass, hF with coe := fun f => f }
#align alg_hom_class.star_alg_hom_class AlgHomClass.instStarAlgHomClass
-
-omit hF
+-/
namespace CharacterSpace
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.star.spectrum
-! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
+! leanprover-community/mathlib commit 087c325ae0ab42dbdd5dee55bc37d3d5a0bf2197
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Analysis.SpecialFunctions.Exponential
import Mathbin.Algebra.Star.StarAlgHom
/-! # Spectral properties in C⋆-algebras
+
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
In this file, we establish various properties related to the spectrum of elements in C⋆-algebras.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/c471da714c044131b90c133701e51b877c246677
@@ -117,19 +117,19 @@ theorem selfAdjoint.mem_spectrum_eq_re [StarModule ℂ A] (a : selfAdjoint A) {z
#align self_adjoint.mem_spectrum_eq_re selfAdjoint.mem_spectrum_eq_re
/-- The spectrum of a selfadjoint is real -/
-theorem IsSelfAdjoint.coe_re_map_spectrum [StarModule ℂ A] {a : A} (ha : IsSelfAdjoint a) :
+theorem IsSelfAdjoint.val_re_map_spectrum [StarModule ℂ A] {a : A} (ha : IsSelfAdjoint a) :
spectrum ℂ a = (coe ∘ re '' spectrum ℂ a : Set ℂ) :=
le_antisymm (fun z hz => ⟨z, hz, (ha.mem_spectrum_eq_re hz).symm⟩) fun z =>
by
rintro ⟨z, hz, rfl⟩
simpa only [(ha.mem_spectrum_eq_re hz).symm, Function.comp_apply] using hz
-#align is_self_adjoint.coe_re_map_spectrum IsSelfAdjoint.coe_re_map_spectrum
+#align is_self_adjoint.coe_re_map_spectrum IsSelfAdjoint.val_re_map_spectrum
/-- The spectrum of a selfadjoint is real -/
-theorem selfAdjoint.coe_re_map_spectrum [StarModule ℂ A] (a : selfAdjoint A) :
+theorem selfAdjoint.val_re_map_spectrum [StarModule ℂ A] (a : selfAdjoint A) :
spectrum ℂ (a : A) = (coe ∘ re '' spectrum ℂ (a : A) : Set ℂ) :=
- a.property.coe_re_map_spectrum
-#align self_adjoint.coe_re_map_spectrum selfAdjoint.coe_re_map_spectrum
+ a.property.val_re_map_spectrum
+#align self_adjoint.coe_re_map_spectrum selfAdjoint.val_re_map_spectrum
end ComplexScalars
@@ -196,22 +196,22 @@ noncomputable instance (priority := 100) : StarHomClass F A ℂ
simp only [map_add, map_smul, star_add, star_smul, hsa, selfAdjoint.star_val_eq]
· intro s
have := AlgHom.apply_mem_spectrum φ (s : A)
- rw [selfAdjoint.coe_re_map_spectrum s] at this
+ rw [selfAdjoint.val_re_map_spectrum s] at this
rcases this with ⟨⟨_, _⟩, _, heq⟩
rw [← HEq, IsROrC.star_def, IsROrC.conj_ofReal]
/-- This is not an instance to avoid type class inference loops. See
`weak_dual.complex.star_hom_class`. -/
-noncomputable def AlgHomClass.starAlgHomClass : StarAlgHomClass F ℂ A ℂ :=
+noncomputable def AlgHomClass.instStarAlgHomClass : StarAlgHomClass F ℂ A ℂ :=
{ WeakDual.Complex.starHomClass, hF with coe := fun f => f }
-#align alg_hom_class.star_alg_hom_class AlgHomClass.starAlgHomClass
+#align alg_hom_class.star_alg_hom_class AlgHomClass.instStarAlgHomClass
omit hF
namespace CharacterSpace
noncomputable instance : StarAlgHomClass (characterSpace ℂ A) ℂ A ℂ :=
- { AlgHomClass.starAlgHomClass with coe := fun f => f }
+ { AlgHomClass.instStarAlgHomClass with coe := fun f => f }
end CharacterSpace
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -66,7 +66,8 @@ theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
by
have hconst : tendsto (fun n : ℕ => (‖a‖₊ : ℝ≥0∞)) at_top _ := tendsto_const_nhds
refine' tendsto_nhds_unique _ hconst
- convert(spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a : A)).comp
+ convert
+ (spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a : A)).comp
(Nat.tendsto_pow_atTop_atTop_of_one_lt one_lt_two)
refine' funext fun n => _
rw [Function.comp_apply, ha.nnnorm_pow_two_pow, ENNReal.coe_pow, ← rpow_nat_cast, ← rpow_mul]
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -37,9 +37,9 @@ theorem unitary.spectrum_subset_circle (u : unitary E) : spectrum 𝕜 (u : E)
nontriviality E
refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
· simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
- · rw [← unitary.coe_toUnits_apply u] at hk
+ · rw [← unitary.coe_toUnits_apply u] at hk
have hnk := ne_zero_of_mem_of_unit hk
- rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
+ rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
have : ‖k‖⁻¹ ≤ ‖↑(unitary.toUnits u)⁻¹‖; simpa only [norm_inv] using norm_le_norm_of_mem hk
simpa using inv_le_of_inv_le (norm_pos_iff.mpr hnk) this
#align unitary.spectrum_subset_circle unitary.spectrum_subset_circle
@@ -87,7 +87,7 @@ theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
have h₂ :=
((ENNReal.continuous_pow 2).Tendsto (spectralRadius ℂ a)).comp
(spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius a)
- rw [← HEq] at h₂
+ rw [← HEq] at h₂
convert tendsto_nhds_unique h₂ (pow_nnnorm_pow_one_div_tendsto_nhds_spectral_radius (a⋆ * a))
rw [(IsSelfAdjoint.star_mul_self a).spectralRadius_eq_nnnorm, sq, nnnorm_star_mul_self, coe_mul]
#align is_star_normal.spectral_radius_eq_nnnorm IsStarNormal.spectralRadius_eq_nnnorm
@@ -195,7 +195,7 @@ noncomputable instance (priority := 100) : StarHomClass F A ℂ
simp only [map_add, map_smul, star_add, star_smul, hsa, selfAdjoint.star_val_eq]
· intro s
have := AlgHom.apply_mem_spectrum φ (s : A)
- rw [selfAdjoint.coe_re_map_spectrum s] at this
+ rw [selfAdjoint.coe_re_map_spectrum s] at this
rcases this with ⟨⟨_, _⟩, _, heq⟩
rw [← HEq, IsROrC.star_def, IsROrC.conj_ofReal]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -23,7 +23,7 @@ local postfix:max "⋆" => star
section
-open Topology ENNReal
+open scoped Topology ENNReal
open Filter ENNReal spectrum CstarRing
@@ -176,7 +176,7 @@ namespace WeakDual
open ContinuousMap Complex
-open ComplexStarModule
+open scoped ComplexStarModule
variable {F A : Type _} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
[CstarRing A] [StarModule ℂ A] [hF : AlgHomClass F ℂ A ℂ]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -40,8 +40,7 @@ theorem unitary.spectrum_subset_circle (u : unitary E) : spectrum 𝕜 (u : E)
· rw [← unitary.coe_toUnits_apply u] at hk
have hnk := ne_zero_of_mem_of_unit hk
rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
- have : ‖k‖⁻¹ ≤ ‖↑(unitary.toUnits u)⁻¹‖
- simpa only [norm_inv] using norm_le_norm_of_mem hk
+ have : ‖k‖⁻¹ ≤ ‖↑(unitary.toUnits u)⁻¹‖; simpa only [norm_inv] using norm_le_norm_of_mem hk
simpa using inv_le_of_inv_le (norm_pos_iff.mpr hnk) this
#align unitary.spectrum_subset_circle unitary.spectrum_subset_circle
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -154,7 +154,7 @@ theorem nnnorm_apply_le (a : A) : ‖(φ a : B)‖₊ ≤ ‖a‖₊ :=
simpa only [hs.spectral_radius_eq_nnnorm, (hs.star_hom_apply φ).spectralRadius_eq_nnnorm,
coe_le_coe] using
show spectralRadius ℂ (φ s) ≤ spectralRadius ℂ s from
- supᵢ_le_supᵢ_of_subset (AlgHom.spectrum_apply_subset φ s)
+ iSup_le_iSup_of_subset (AlgHom.spectrum_apply_subset φ s)
#align star_alg_hom.nnnorm_apply_le StarAlgHom.nnnorm_apply_le
/-- A star algebra homomorphism of complex C⋆-algebras is norm contractive. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/2f8347015b12b0864dfaf366ec4909eb70c78740
@@ -198,7 +198,7 @@ noncomputable instance (priority := 100) : StarHomClass F A ℂ
have := AlgHom.apply_mem_spectrum φ (s : A)
rw [selfAdjoint.coe_re_map_spectrum s] at this
rcases this with ⟨⟨_, _⟩, _, heq⟩
- rw [← HEq, IsROrC.star_def, IsROrC.conj_of_real]
+ rw [← HEq, IsROrC.star_def, IsROrC.conj_ofReal]
/-- This is not an instance to avoid type class inference loops. See
`weak_dual.complex.star_hom_class`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/738054fa93d43512da144ec45ce799d18fd44248
@@ -4,13 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.star.spectrum
-! leanprover-community/mathlib commit 1e3201306d4d9eb1fd54c60d7c4510ad5126f6f9
+! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Analysis.NormedSpace.Star.Basic
import Mathbin.Analysis.NormedSpace.Spectrum
-import Mathbin.Analysis.NormedSpace.Star.Exponential
import Mathbin.Analysis.SpecialFunctions.Exponential
import Mathbin.Algebra.Star.StarAlgHom
mathlib commit https://github.com/leanprover-community/mathlib/commit/39478763114722f0ec7613cb2f3f7701f9b86c8d
@@ -193,7 +193,7 @@ noncomputable instance (priority := 100) : StarHomClass F A ℂ
coe_injective' := FunLike.coe_injective'
map_star φ a := by
suffices hsa : ∀ s : selfAdjoint A, (φ s)⋆ = φ s
- · rw [← realPart_add_i_smul_imaginaryPart a]
+ · rw [← realPart_add_I_smul_imaginaryPart a]
simp only [map_add, map_smul, star_add, star_smul, hsa, selfAdjoint.star_val_eq]
· intro s
have := AlgHom.apply_mem_spectrum φ (s : A)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -68,8 +68,7 @@ theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
by
have hconst : tendsto (fun n : ℕ => (‖a‖₊ : ℝ≥0∞)) at_top _ := tendsto_const_nhds
refine' tendsto_nhds_unique _ hconst
- convert
- (spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a : A)).comp
+ convert(spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a : A)).comp
(Nat.tendsto_pow_atTop_atTop_of_one_lt one_lt_two)
refine' funext fun n => _
rw [Function.comp_apply, ha.nnnorm_pow_two_pow, ENNReal.coe_pow, ← rpow_nat_cast, ← rpow_mul]
mathlib commit https://github.com/leanprover-community/mathlib/commit/2196ab363eb097c008d4497125e0dde23fb36db2
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.star.spectrum
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 1e3201306d4d9eb1fd54c60d7c4510ad5126f6f9
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,7 +15,7 @@ import Mathbin.Analysis.SpecialFunctions.Exponential
import Mathbin.Algebra.Star.StarAlgHom
/-! # Spectral properties in C⋆-algebras
-In this file, we establish various propreties related to the spectrum of elements in C⋆-algebras.
+In this file, we establish various properties related to the spectrum of elements in C⋆-algebras.
-/
@@ -99,6 +99,7 @@ theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
theorem IsSelfAdjoint.mem_spectrum_eq_re [StarModule ℂ A] {a : A} (ha : IsSelfAdjoint a) {z : ℂ}
(hz : z ∈ spectrum ℂ a) : z = z.re :=
by
+ have hu := exp_mem_unitary_of_mem_skewAdjoint ℂ (ha.smul_mem_skew_adjoint conj_I)
let Iu := Units.mk0 I I_ne_zero
have : exp ℂ (I • z) ∈ spectrum ℂ (exp ℂ (I • a)) := by
simpa only [Units.smul_def, Units.val_mk0] using
@@ -108,7 +109,7 @@ theorem IsSelfAdjoint.mem_spectrum_eq_re [StarModule ℂ A] {a : A} (ha : IsSelf
(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 ha.exp_i_smul_unitary this)
+ spectrum.subset_circle_of_unitary hu this)
#align is_self_adjoint.mem_spectrum_eq_re IsSelfAdjoint.mem_spectrum_eq_re
/-- Any element of the spectrum of a selfadjoint is real. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -24,9 +24,9 @@ local postfix:max "⋆" => star
section
-open Topology Ennreal
+open Topology ENNReal
-open Filter Ennreal spectrum CstarRing
+open Filter ENNReal spectrum CstarRing
section UnitarySpectrum
@@ -72,14 +72,14 @@ theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
(spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius (a : A)).comp
(Nat.tendsto_pow_atTop_atTop_of_one_lt one_lt_two)
refine' funext fun n => _
- rw [Function.comp_apply, ha.nnnorm_pow_two_pow, Ennreal.coe_pow, ← rpow_nat_cast, ← rpow_mul]
+ rw [Function.comp_apply, ha.nnnorm_pow_two_pow, ENNReal.coe_pow, ← rpow_nat_cast, ← rpow_mul]
simp
#align is_self_adjoint.spectral_radius_eq_nnnorm IsSelfAdjoint.spectralRadius_eq_nnnorm
theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
spectralRadius ℂ a = ‖a‖₊ :=
by
- refine' (Ennreal.pow_strictMono two_ne_zero).Injective _
+ refine' (ENNReal.pow_strictMono two_ne_zero).Injective _
have heq :
(fun n : ℕ => (‖(a⋆ * a) ^ n‖₊ ^ (1 / n : ℝ) : ℝ≥0∞)) =
(fun x => x ^ 2) ∘ fun n : ℕ => (‖a ^ n‖₊ ^ (1 / n : ℝ) : ℝ≥0∞) :=
@@ -88,7 +88,7 @@ theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
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]
have h₂ :=
- ((Ennreal.continuous_pow 2).Tendsto (spectralRadius ℂ a)).comp
+ ((ENNReal.continuous_pow 2).Tendsto (spectralRadius ℂ a)).comp
(spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectralRadius a)
rw [← HEq] at h₂
convert tendsto_nhds_unique h₂ (pow_nnnorm_pow_one_div_tendsto_nhds_spectral_radius (a⋆ * a))
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
nat_cast
/int_cast
/rat_cast
to natCast
/intCast
/ratCast
(#11486)
Now that I am defining NNRat.cast
, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast
/intCast
/ratCast
over nat_cast
/int_cast
/rat_cast
, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.
@@ -65,7 +65,7 @@ theorem IsSelfAdjoint.spectralRadius_eq_nnnorm {a : A} (ha : IsSelfAdjoint a) :
(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
refine' funext fun n => _
- rw [Function.comp_apply, ha.nnnorm_pow_two_pow, ENNReal.coe_pow, ← rpow_nat_cast, ← rpow_mul]
+ rw [Function.comp_apply, ha.nnnorm_pow_two_pow, ENNReal.coe_pow, ← rpow_natCast, ← rpow_mul]
simp
#align is_self_adjoint.spectral_radius_eq_nnnorm IsSelfAdjoint.spectralRadius_eq_nnnorm
@@ -76,7 +76,7 @@ theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
(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, ←
+ rw [Function.comp_apply, ← rpow_natCast, ← rpow_mul, mul_comm, rpow_mul, rpow_natCast, ←
coe_pow, sq, ← nnnorm_star_mul_self, Commute.mul_pow (star_comm_self' a), star_pow]
have h₂ :=
((ENNReal.continuous_pow 2).tendsto (spectralRadius ℂ a)).comp
IsROrC
to RCLike
(#10819)
IsROrC
contains data, which goes against the expectation that classes prefixed with Is
are prop-valued. People have been complaining about this on and off, so this PR renames IsROrC
to RCLike
.
@@ -196,8 +196,8 @@ noncomputable instance (priority := 100) Complex.instStarHomClass : StarHomClass
rw [selfAdjoint.val_re_map_spectrum s] at this
rcases this with ⟨⟨_, _⟩, _, heq⟩
simp only [Function.comp_apply] at heq
- rw [← heq, IsROrC.star_def]
- exact IsROrC.conj_ofReal _
+ rw [← heq, RCLike.star_def]
+ exact RCLike.conj_ofReal _
/-- This is not an instance to avoid type class inference loops. See
`WeakDual.Complex.instStarHomClass`. -/
@@ -155,6 +155,24 @@ noncomputable instance (priority := 100) : ContinuousLinearMapClass F ℂ A B :=
end StarAlgHom
+namespace StarAlgEquiv
+
+variable {F A B : Type*} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
+ [CstarRing A] [NormedRing B] [NormedAlgebra ℂ B] [CompleteSpace B] [StarRing B] [CstarRing B]
+ [EquivLike F A B] [NonUnitalAlgEquivClass F ℂ A B] [StarAlgEquivClass F ℂ A B]
+
+lemma nnnorm_map (φ : F) (a : A) : ‖φ a‖₊ = ‖a‖₊ :=
+ le_antisymm (StarAlgHom.nnnorm_apply_le φ a) <| by
+ simpa using StarAlgHom.nnnorm_apply_le (symm (φ : A ≃⋆ₐ[ℂ] B)) ((φ : A ≃⋆ₐ[ℂ] B) a)
+
+lemma norm_map (φ : F) (a : A) : ‖φ a‖ = ‖a‖ :=
+ congr_arg NNReal.toReal (nnnorm_map φ a)
+
+lemma isometry (φ : F) : Isometry φ :=
+ AddMonoidHomClass.isometry_of_norm φ (norm_map φ)
+
+end StarAlgEquiv
+
end
namespace WeakDual
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -170,16 +170,16 @@ variable {F A : Type*} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [S
See note [lower instance priority] -/
noncomputable instance (priority := 100) Complex.instStarHomClass : StarHomClass F A ℂ where
map_star φ a := by
- suffices hsa : ∀ s : selfAdjoint A, (φ s)⋆ = φ s
- · rw [← realPart_add_I_smul_imaginaryPart a]
+ suffices hsa : ∀ s : selfAdjoint A, (φ s)⋆ = φ s by
+ rw [← realPart_add_I_smul_imaginaryPart a]
simp only [map_add, map_smul, star_add, star_smul, hsa, selfAdjoint.star_val_eq]
- · intro s
- have := AlgHom.apply_mem_spectrum φ (s : A)
- rw [selfAdjoint.val_re_map_spectrum s] at this
- rcases this with ⟨⟨_, _⟩, _, heq⟩
- simp only [Function.comp_apply] at heq
- rw [← heq, IsROrC.star_def]
- exact IsROrC.conj_ofReal _
+ intro s
+ have := AlgHom.apply_mem_spectrum φ (s : A)
+ rw [selfAdjoint.val_re_map_spectrum s] at this
+ rcases this with ⟨⟨_, _⟩, _, heq⟩
+ simp only [Function.comp_apply] at heq
+ rw [← heq, IsROrC.star_def]
+ exact IsROrC.conj_ofReal _
/-- This is not an instance to avoid type class inference loops. See
`WeakDual.Complex.instStarHomClass`. -/
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -126,7 +126,7 @@ namespace StarAlgHom
variable {F A B : Type*} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
[CstarRing A] [NormedRing B] [NormedAlgebra ℂ B] [CompleteSpace B] [StarRing B] [CstarRing B]
- [hF : StarAlgHomClass F ℂ A B] (φ : F)
+ [FunLike F A B] [AlgHomClass F ℂ A B] [StarAlgHomClass F ℂ A B] (φ : F)
/-- A star algebra homomorphism of complex C⋆-algebras is norm contractive. -/
theorem nnnorm_apply_le (a : A) : ‖(φ a : B)‖₊ ≤ ‖a‖₊ := by
@@ -164,13 +164,11 @@ open ContinuousMap Complex
open scoped ComplexStarModule
variable {F A : Type*} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
- [CstarRing A] [StarModule ℂ A] [hF : AlgHomClass F ℂ A ℂ]
+ [CstarRing A] [StarModule ℂ A] [FunLike F A ℂ] [hF : AlgHomClass F ℂ A ℂ]
/-- This instance is provided instead of `StarAlgHomClass` to avoid type class inference loops.
See note [lower instance priority] -/
noncomputable instance (priority := 100) Complex.instStarHomClass : StarHomClass F A ℂ where
- coe φ := φ
- coe_injective' := DFunLike.coe_injective'
map_star φ a := by
suffices hsa : ∀ s : selfAdjoint A, (φ s)⋆ = φ s
· rw [← realPart_add_I_smul_imaginaryPart a]
@@ -185,14 +183,14 @@ noncomputable instance (priority := 100) Complex.instStarHomClass : StarHomClass
/-- This is not an instance to avoid type class inference loops. See
`WeakDual.Complex.instStarHomClass`. -/
-noncomputable def _root_.AlgHomClass.instStarAlgHomClass : StarAlgHomClass F ℂ A ℂ :=
- { WeakDual.Complex.instStarHomClass, hF with coe := fun f => f }
+lemma _root_.AlgHomClass.instStarAlgHomClass : StarAlgHomClass F ℂ A ℂ :=
+ { WeakDual.Complex.instStarHomClass, hF with }
#align alg_hom_class.star_alg_hom_class AlgHomClass.instStarAlgHomClass
namespace CharacterSpace
noncomputable instance instStarAlgHomClass : StarAlgHomClass (characterSpace ℂ A) ℂ A ℂ :=
- { AlgHomClass.instStarAlgHomClass with coe := fun f => f }
+ { AlgHomClass.instStarAlgHomClass with }
end CharacterSpace
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -170,7 +170,7 @@ variable {F A : Type*} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [S
See note [lower instance priority] -/
noncomputable instance (priority := 100) Complex.instStarHomClass : StarHomClass F A ℂ where
coe φ := φ
- coe_injective' := FunLike.coe_injective'
+ coe_injective' := DFunLike.coe_injective'
map_star φ a := by
suffices hsa : ∀ s : selfAdjoint A, (φ s)⋆ = φ s
· rw [← realPart_add_I_smul_imaginaryPart a]
@@ -21,7 +21,7 @@ section
open scoped Topology ENNReal
-open Filter ENNReal spectrum CstarRing
+open Filter ENNReal spectrum CstarRing NormedSpace
section UnitarySpectrum
@@ -91,7 +91,7 @@ theorem IsSelfAdjoint.mem_spectrum_eq_re [StarModule ℂ A] {a : A} (ha : IsSelf
(hz : z ∈ spectrum ℂ a) : z = z.re := by
have hu := exp_mem_unitary_of_mem_skewAdjoint ℂ (ha.smul_mem_skewAdjoint conj_I)
let Iu := Units.mk0 I I_ne_zero
- have : _root_.exp ℂ (I • z) ∈ spectrum ℂ (_root_.exp ℂ (I • a)) := by
+ have : NormedSpace.exp ℂ (I • z) ∈ spectrum ℂ (NormedSpace.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)
exact Complex.ext (ofReal_re _) <| by
@@ -33,12 +33,12 @@ theorem unitary.spectrum_subset_circle (u : unitary E) :
nontriviality E
refine' fun k hk => mem_sphere_zero_iff_norm.mpr (le_antisymm _ _)
· simpa only [CstarRing.norm_coe_unitary u] using norm_le_norm_of_mem hk
- · rw [← unitary.toUnits_apply_val u] at hk
+ · rw [← unitary.val_toUnits_apply u] at hk
have hnk := ne_zero_of_mem_of_unit hk
rw [← inv_inv (unitary.toUnits u), ← spectrum.map_inv, Set.mem_inv] at hk
have : ‖k‖⁻¹ ≤ ‖(↑(unitary.toUnits u)⁻¹ : E)‖ :=
by simpa only [norm_inv] using norm_le_norm_of_mem hk
- simpa [←Units.inv_eq_val_inv] using inv_le_of_inv_le (norm_pos_iff.mpr hnk) this
+ simpa using inv_le_of_inv_le (norm_pos_iff.mpr hnk) this
#align unitary.spectrum_subset_circle unitary.spectrum_subset_circle
theorem spectrum.subset_circle_of_unitary {u : E} (h : u ∈ unitary E) :
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -25,7 +25,7 @@ open Filter ENNReal spectrum CstarRing
section UnitarySpectrum
-variable {𝕜 : Type _} [NormedField 𝕜] {E : Type _} [NormedRing E] [StarRing E] [CstarRing E]
+variable {𝕜 : Type*} [NormedField 𝕜] {E : Type*} [NormedRing E] [StarRing E] [CstarRing E]
[NormedAlgebra 𝕜 E] [CompleteSpace E]
theorem unitary.spectrum_subset_circle (u : unitary E) :
@@ -52,7 +52,7 @@ section ComplexScalars
open Complex
-variable {A : Type _} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
+variable {A : Type*} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
[CstarRing A]
local notation "↑ₐ" => algebraMap ℂ A
@@ -124,7 +124,7 @@ end ComplexScalars
namespace StarAlgHom
-variable {F A B : Type _} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
+variable {F A B : Type*} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
[CstarRing A] [NormedRing B] [NormedAlgebra ℂ B] [CompleteSpace B] [StarRing B] [CstarRing B]
[hF : StarAlgHomClass F ℂ A B] (φ : F)
@@ -163,7 +163,7 @@ open ContinuousMap Complex
open scoped ComplexStarModule
-variable {F A : Type _} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
+variable {F A : Type*} [NormedRing A] [NormedAlgebra ℂ A] [CompleteSpace A] [StarRing A]
[CstarRing A] [StarModule ℂ A] [hF : AlgHomClass F ℂ A ℂ]
/-- This instance is provided instead of `StarAlgHomClass` to avoid type class inference loops.
@@ -2,17 +2,14 @@
Copyright (c) 2022 Jireh Loreaux. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
-
-! This file was ported from Lean 3 source module analysis.normed_space.star.spectrum
-! leanprover-community/mathlib commit f0c8bf9245297a541f468be517f1bde6195105e9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.NormedSpace.Star.Basic
import Mathlib.Analysis.NormedSpace.Spectrum
import Mathlib.Analysis.SpecialFunctions.Exponential
import Mathlib.Algebra.Star.StarAlgHom
+#align_import analysis.normed_space.star.spectrum from "leanprover-community/mathlib"@"f0c8bf9245297a541f468be517f1bde6195105e9"
+
/-! # Spectral properties in C⋆-algebras
In this file, we establish various properties related to the spectrum of elements in C⋆-algebras.
-/
@@ -77,7 +77,7 @@ theorem IsStarNormal.spectralRadius_eq_nnnorm (a : A) [IsStarNormal a] :
refine' (ENNReal.pow_strictMono two_ne_zero).injective _
have heq :
(fun n : ℕ => (‖(a⋆ * a) ^ n‖₊ : ℝ≥0∞) ^ (1 / n : ℝ)) =
- (fun x => x ^ 2) ∘ fun n : ℕ => (‖a ^ n‖₊ : ℝ≥0∞) ^ (1 / n : ℝ) := by
+ (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]
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file