Skip to content

Commit 7b4a99b

Browse files
author
leanprover-community-mathlib4-bot
committed
2 parents 9dbede0 + 4d9990b commit 7b4a99b

File tree

18 files changed

+490
-213
lines changed

18 files changed

+490
-213
lines changed

Mathlib/Algebra/Lie/TraceForm.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ lemma lowerCentralSeries_one_inf_center_le_ker_traceForm [Module.Free R M] [Modu
277277
intro y
278278
exact y.induction_on rfl (fun a u ↦ by simp [hzc u]) (fun u v hu hv ↦ by simp [hu, hv])
279279
apply LinearMap.trace_comp_eq_zero_of_commute_of_trace_restrict_eq_zero
280-
· simpa only [Module.End.maxGenEigenspace_def] using IsTriangularizable.iSup_eq_top (1 ⊗ₜ[R] x)
280+
· exact IsTriangularizable.maxGenEigenspace_eq_top (1 ⊗ₜ[R] x)
281281
· exact fun μ ↦ trace_toEnd_eq_zero_of_mem_lcs A (A ⊗[R] L)
282282
(genWeightSpaceOf (A ⊗[R] M) μ ((1:A) ⊗ₜ[R] x)) (le_refl 1) hz
283283
· exact commute_toEnd_of_mem_center_right (A ⊗[R] M) hzc (1 ⊗ₜ x)

Mathlib/Algebra/Lie/Weights/Basic.lean

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ theorem mem_genWeightSpaceOf (χ : R) (x : L) (m : M) :
165165

166166
theorem coe_genWeightSpaceOf_zero (x : L) :
167167
↑(genWeightSpaceOf M (0 : R) x) = ⨆ k, LinearMap.ker (toEnd R L M x ^ k) := by
168-
simp [genWeightSpaceOf, Module.End.maxGenEigenspace_def]
168+
simp [genWeightSpaceOf, Module.End.iSup_genEigenspace_eq]
169169

170170
/-- If `M` is a representation of a nilpotent Lie algebra `L`
171171
and `χ : L → R` is a family of scalars,
@@ -267,7 +267,7 @@ lemma genWeightSpaceOf_ne_bot (χ : Weight R L M) (x : L) :
267267
lemma hasEigenvalueAt (χ : Weight R L M) (x : L) :
268268
(toEnd R L M x).HasEigenvalue (χ x) := by
269269
obtain ⟨k : ℕ, hk : (toEnd R L M x).genEigenspace (χ x) k ≠ ⊥⟩ := by
270-
simpa [genWeightSpaceOf, Module.End.maxGenEigenspace_def] using χ.genWeightSpaceOf_ne_bot x
270+
simpa [genWeightSpaceOf, Module.End.iSup_genEigenspace_eq] using χ.genWeightSpaceOf_ne_bot x
271271
exact Module.End.hasEigenvalue_of_hasGenEigenvalue hk
272272

273273
lemma apply_eq_zero_of_isNilpotent [NoZeroSMulDivisors R M] [IsReduced R]
@@ -631,8 +631,7 @@ lemma disjoint_genWeightSpaceOf [NoZeroSMulDivisors R M] {x : L} {φ₁ φ₂ :
631631
Disjoint (genWeightSpaceOf M φ₁ x) (genWeightSpaceOf M φ₂ x) := by
632632
rw [LieSubmodule.disjoint_iff_coe_toSubmodule]
633633
dsimp [genWeightSpaceOf]
634-
simp_rw [Module.End.maxGenEigenspace_def]
635-
exact Module.End.disjoint_iSup_genEigenspace _ h
634+
exact Module.End.disjoint_unifEigenspace _ h _ _
636635

637636
lemma disjoint_genWeightSpace [NoZeroSMulDivisors R M] {χ₁ χ₂ : L → R} (h : χ₁ ≠ χ₂) :
638637
Disjoint (genWeightSpace M χ₁) (genWeightSpace M χ₂) := by
@@ -665,8 +664,7 @@ lemma independent_genWeightSpaceOf [NoZeroSMulDivisors R M] (x : L) :
665664
CompleteLattice.Independent fun (χ : R) ↦ genWeightSpaceOf M χ x := by
666665
rw [LieSubmodule.independent_iff_coe_toSubmodule]
667666
dsimp [genWeightSpaceOf]
668-
simp_rw [Module.End.maxGenEigenspace_def]
669-
exact (toEnd R L M x).independent_genEigenspace
667+
exact (toEnd R L M x).independent_unifEigenspace _
670668

671669
lemma finite_genWeightSpaceOf_ne_bot [NoZeroSMulDivisors R M] [IsNoetherian R M] (x : L) :
672670
{χ : R | genWeightSpaceOf M χ x ≠ ⊥}.Finite :=
@@ -688,25 +686,26 @@ noncomputable instance Weight.instFintype [NoZeroSMulDivisors R M] [IsNoetherian
688686
/-- A Lie module `M` of a Lie algebra `L` is triangularizable if the endomorhpism of `M` defined by
689687
any `x : L` is triangularizable. -/
690688
class IsTriangularizable : Prop where
691-
iSup_eq_top : ∀ x, ⨆ φ, ⨆ k, (toEnd R L M x).genEigenspace φ k = ⊤
689+
maxGenEigenspace_eq_top : ∀ x, ⨆ φ, (toEnd R L M x).maxGenEigenspace φ = ⊤
692690

693691
instance (L' : LieSubalgebra R L) [IsTriangularizable R L M] : IsTriangularizable R L' M where
694-
iSup_eq_top x := IsTriangularizable.iSup_eq_top (x : L)
692+
maxGenEigenspace_eq_top x := IsTriangularizable.maxGenEigenspace_eq_top (x : L)
695693

696694
instance (I : LieIdeal R L) [IsTriangularizable R L M] : IsTriangularizable R I M where
697-
iSup_eq_top x := IsTriangularizable.iSup_eq_top (x : L)
695+
maxGenEigenspace_eq_top x := IsTriangularizable.maxGenEigenspace_eq_top (x : L)
698696

699697
instance [IsTriangularizable R L M] : IsTriangularizable R (LieModule.toEnd R L M).range M where
700-
iSup_eq_top := by rintro ⟨-, x, rfl⟩; exact IsTriangularizable.iSup_eq_top x
698+
maxGenEigenspace_eq_top := by
699+
rintro ⟨-, x, rfl⟩
700+
exact IsTriangularizable.maxGenEigenspace_eq_top x
701701

702702
@[simp]
703703
lemma iSup_genWeightSpaceOf_eq_top [IsTriangularizable R L M] (x : L) :
704704
⨆ (φ : R), genWeightSpaceOf M φ x = ⊤ := by
705705
rw [← LieSubmodule.coe_toSubmodule_eq_iff, LieSubmodule.iSup_coe_toSubmodule,
706706
LieSubmodule.top_coeSubmodule]
707707
dsimp [genWeightSpaceOf]
708-
simp_rw [Module.End.maxGenEigenspace_def]
709-
exact IsTriangularizable.iSup_eq_top x
708+
exact IsTriangularizable.maxGenEigenspace_eq_top x
710709

711710
open LinearMap Module in
712711
@[simp]
@@ -729,12 +728,12 @@ variable [Field K] [LieAlgebra K L] [Module K M] [LieModule K L M] [LieAlgebra.I
729728
[FiniteDimensional K M]
730729

731730
instance instIsTriangularizableOfIsAlgClosed [IsAlgClosed K] : IsTriangularizable K L M :=
732-
fun _ ↦ Module.End.iSup_genEigenspace_eq_top _⟩
731+
fun _ ↦ Module.End.iSup_maxGenEigenspace_eq_top _⟩
733732

734733
instance (N : LieSubmodule K L M) [IsTriangularizable K L M] : IsTriangularizable K L N := by
735734
refine ⟨fun y ↦ ?_⟩
736735
rw [← N.toEnd_restrict_eq_toEnd y]
737-
exact Module.End.iSup_genEigenspace_restrict_eq_top _ (IsTriangularizable.iSup_eq_top y)
736+
exact Module.End.unifEigenspace_restrict_eq_top _ (IsTriangularizable.maxGenEigenspace_eq_top y)
738737

739738
/-- For a triangularizable Lie module in finite dimensions, the weight spaces span the entire space.
740739
@@ -745,8 +744,7 @@ lemma iSup_genWeightSpace_eq_top [IsTriangularizable K L M] :
745744
LieSubmodule.iInf_coe_toSubmodule, LieSubmodule.top_coeSubmodule, genWeightSpace]
746745
refine Module.End.iSup_iInf_maxGenEigenspace_eq_top_of_forall_mapsTo (toEnd K L M)
747746
(fun x y φ z ↦ (genWeightSpaceOf M φ y).lie_mem) ?_
748-
simp_rw [Module.End.maxGenEigenspace_def]
749-
apply IsTriangularizable.iSup_eq_top
747+
apply IsTriangularizable.maxGenEigenspace_eq_top
750748

751749
lemma iSup_genWeightSpace_eq_top' [IsTriangularizable K L M] :
752750
⨆ χ : Weight K L M, genWeightSpace M χ = ⊤ := by

Mathlib/Algebra/Lie/Weights/Linear.lean

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,15 @@ instance instLinearWeightsOfIsLieAbelian [IsLieAbelian L] [NoZeroSMulDivisors R
9898
rw [commute_iff_lie_eq, ← LieHom.map_lie, trivial_lie_zero, LieHom.map_zero]
9999
intro χ hχ x y
100100
simp_rw [Ne, ← LieSubmodule.coe_toSubmodule_eq_iff, genWeightSpace, genWeightSpaceOf,
101-
LieSubmodule.iInf_coe_toSubmodule, LieSubmodule.bot_coeSubmodule,
102-
Module.End.maxGenEigenspace_def] at hχ
103-
exact Module.End.map_add_of_iInf_genEigenspace_ne_bot_of_commute
104-
(toEnd R L M).toLinearMap χ hχ h x y
101+
LieSubmodule.iInf_coe_toSubmodule, LieSubmodule.bot_coeSubmodule] at hχ
102+
exact Module.End.map_add_of_iInf_unifEigenspace_ne_bot_of_commute
103+
(toEnd R L M).toLinearMap χ _ hχ h x y
105104
{ map_add := aux
106105
map_smul := fun χ hχ t x ↦ by
107106
simp_rw [Ne, ← LieSubmodule.coe_toSubmodule_eq_iff, genWeightSpace, genWeightSpaceOf,
108-
LieSubmodule.iInf_coe_toSubmodule, LieSubmodule.bot_coeSubmodule,
109-
Module.End.maxGenEigenspace_def] at hχ
110-
exact Module.End.map_smul_of_iInf_genEigenspace_ne_bot
111-
(toEnd R L M).toLinearMap χ hχ t x
107+
LieSubmodule.iInf_coe_toSubmodule, LieSubmodule.bot_coeSubmodule] at hχ
108+
exact Module.End.map_smul_of_iInf_unifEigenspace_ne_bot
109+
(toEnd R L M).toLinearMap χ _ hχ t x
112110
map_lie := fun χ hχ t x ↦ by
113111
rw [trivial_lie_zero, ← add_left_inj (χ 0), ← aux χ hχ, zero_add, zero_add] }
114112

Mathlib/Analysis/InnerProductSpace/JointEigenspace.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ theorem eigenspace_inf_eigenspace
7272
(hAB : A ∘ₗ B = B ∘ₗ A) (γ : 𝕜) :
7373
eigenspace A α ⊓ eigenspace B γ = map (Submodule.subtype (eigenspace A α))
7474
(eigenspace (B.restrict (eigenspace_invariant_of_commute hAB α)) γ) :=
75-
(eigenspace A α).inf_genEigenspace _ _ (k := 1)
75+
(eigenspace A α).inf_unifEigenspace _ _ (k := 1)
7676

7777
variable [FiniteDimensional 𝕜 E]
7878

Mathlib/CategoryTheory/Functor/Const.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,13 @@ def compConstIso (F : C ⥤ D) :
9999
(fun X => NatIso.ofComponents (fun _ => Iso.refl _) (by aesop_cat))
100100
(by aesop_cat)
101101

102+
/-- The canonical isomorphism
103+
`const D ⋙ (whiskeringLeft J _ _).obj F ≅ const J`.-/
104+
@[simps!]
105+
def constCompWhiskeringLeftIso (F : J ⥤ D) :
106+
const D ⋙ (whiskeringLeft J D C).obj F ≅ const J :=
107+
NatIso.ofComponents fun X => NatIso.ofComponents fun Y => Iso.refl _
108+
102109
end
103110

104111
end CategoryTheory.Functor

Mathlib/CategoryTheory/Functor/KanExtension/Adjunction.lean

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ right Kan extension along `L`.
2222

2323
namespace CategoryTheory
2424

25-
open Category
25+
open Category Limits
2626

2727
namespace Functor
2828

@@ -122,6 +122,20 @@ lemma isIso_lanAdjunction_counit_app_iff (G : D ⥤ H) :
122122
IsIso ((L.lanAdjunction H).counit.app G) ↔ G.IsLeftKanExtension (𝟙 (L ⋙ G)) :=
123123
(isLeftKanExtension_iff_isIso _ (L.lanUnit.app (L ⋙ G)) _ (by simp)).symm
124124

125+
/-- Composing the left Kan extension of `L : C ⥤ D` with `colim` on shapes `D` is isomorphic
126+
to `colim` on shapes `C`. -/
127+
@[simps!]
128+
noncomputable def lanCompColimIso (L : C ⥤ D) [∀ (G : C ⥤ H), L.HasLeftKanExtension G]
129+
[HasColimitsOfShape C H] [HasColimitsOfShape D H] : L.lan ⋙ colim ≅ colim (C := H) :=
130+
Iso.symm <| NatIso.ofComponents
131+
(fun G ↦ (colimitIsoOfIsLeftKanExtension _ (L.lanUnit.app G)).symm)
132+
(fun f ↦ colimit.hom_ext (fun i ↦ by
133+
dsimp
134+
rw [ι_colimMap_assoc, ι_colimitIsoOfIsLeftKanExtension_inv,
135+
ι_colimitIsoOfIsLeftKanExtension_inv_assoc, ι_colimMap, ← assoc, ← assoc]
136+
congr 1
137+
exact congr_app (L.lanUnit.naturality f) i))
138+
125139
end
126140

127141
section
@@ -251,6 +265,20 @@ lemma isIso_ranAdjunction_unit_app_iff (G : D ⥤ H) :
251265
IsIso ((L.ranAdjunction H).unit.app G) ↔ G.IsRightKanExtension (𝟙 (L ⋙ G)) :=
252266
(isRightKanExtension_iff_isIso _ (L.ranCounit.app (L ⋙ G)) _ (by simp)).symm
253267

268+
/-- Composing the right Kan extension of `L : C ⥤ D` with `lim` on shapes `D` is isomorphic
269+
to `lim` on shapes `C`. -/
270+
@[simps!]
271+
noncomputable def ranCompLimIso (L : C ⥤ D) [∀ (G : C ⥤ H), L.HasRightKanExtension G]
272+
[HasLimitsOfShape C H] [HasLimitsOfShape D H] : L.ran ⋙ lim ≅ lim (C := H) :=
273+
NatIso.ofComponents
274+
(fun G ↦ limitIsoOfIsRightKanExtension _ (L.ranCounit.app G))
275+
(fun f ↦ limit.hom_ext (fun i ↦ by
276+
dsimp
277+
rw [assoc, assoc, limMap_π, limitIsoOfIsRightKanExtension_hom_π_assoc,
278+
limitIsoOfIsRightKanExtension_hom_π, limMap_π_assoc]
279+
congr 1
280+
exact congr_app (L.ranCounit.naturality f) i))
281+
254282
end
255283

256284
section

Mathlib/CategoryTheory/Functor/KanExtension/Basic.lean

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,106 @@ lemma isRightKanExtension_iff_of_iso₂ {F₁' F₂' : D ⥤ H} (α₁ : L ⋙ F
544544

545545
end
546546

547+
section Colimit
548+
549+
variable (F' : D ⥤ H) {L : C ⥤ D} {F : C ⥤ H} (α : F ⟶ L ⋙ F') [F'.IsLeftKanExtension α]
550+
551+
/-- Construct a cocone for a left Kan extension `F' : D ⥤ H` of `F : C ⥤ H` along a functor
552+
`L : C ⥤ D` given a cocone for `F`. -/
553+
@[simps]
554+
noncomputable def coconeOfIsLeftKanExtension (c : Cocone F) : Cocone F' where
555+
pt := c.pt
556+
ι := F'.descOfIsLeftKanExtension α _ c.ι
557+
558+
/-- If `c` is a colimit cocone for a functor `F : C ⥤ H` and `α : F ⟶ L ⋙ F'` is the unit of any
559+
left Kan extension `F' : D ⥤ H` of `F` along `L : C ⥤ D`, then `coconeOfIsLeftKanExtension α c` is
560+
a colimit cocone, too. -/
561+
@[simps]
562+
def isColimitCoconeOfIsLeftKanExtension {c : Cocone F} (hc : IsColimit c) :
563+
IsColimit (F'.coconeOfIsLeftKanExtension α c) where
564+
desc s := hc.desc (Cocone.mk _ (α ≫ whiskerLeft L s.ι))
565+
fac s := by
566+
have : F'.descOfIsLeftKanExtension α ((const D).obj c.pt) c.ι ≫
567+
(Functor.const _).map (hc.desc (Cocone.mk _ (α ≫ whiskerLeft L s.ι))) = s.ι :=
568+
F'.hom_ext_of_isLeftKanExtension α _ _ (by aesop_cat)
569+
exact congr_app this
570+
uniq s m hm := hc.hom_ext (fun j ↦ by
571+
have := hm (L.obj j)
572+
nth_rw 1 [← F'.descOfIsLeftKanExtension_fac_app α ((const D).obj c.pt)]
573+
dsimp at this ⊢
574+
rw [assoc, this, IsColimit.fac, NatTrans.comp_app, whiskerLeft_app])
575+
576+
variable [HasColimit F] [HasColimit F']
577+
578+
/-- If `F' : D ⥤ H` is a left Kan extension of `F : C ⥤ H` along `L : C ⥤ D`, the colimit over `F'`
579+
is isomorphic to the colimit over `F`. -/
580+
noncomputable def colimitIsoOfIsLeftKanExtension : colimit F' ≅ colimit F :=
581+
IsColimit.coconePointUniqueUpToIso (colimit.isColimit F')
582+
(F'.isColimitCoconeOfIsLeftKanExtension α (colimit.isColimit F))
583+
584+
@[reassoc (attr := simp)]
585+
lemma ι_colimitIsoOfIsLeftKanExtension_hom (i : C) :
586+
α.app i ≫ colimit.ι F' (L.obj i) ≫ (F'.colimitIsoOfIsLeftKanExtension α).hom =
587+
colimit.ι F i := by
588+
simp [colimitIsoOfIsLeftKanExtension]
589+
590+
@[reassoc (attr := simp)]
591+
lemma ι_colimitIsoOfIsLeftKanExtension_inv (i : C) :
592+
colimit.ι F i ≫ (F'.colimitIsoOfIsLeftKanExtension α).inv =
593+
α.app i ≫ colimit.ι F' (L.obj i) := by
594+
rw [Iso.comp_inv_eq, assoc, ι_colimitIsoOfIsLeftKanExtension_hom]
595+
596+
end Colimit
597+
598+
section Limit
599+
600+
variable (F' : D ⥤ H) {L : C ⥤ D} {F : C ⥤ H} (α : L ⋙ F' ⟶ F) [F'.IsRightKanExtension α]
601+
602+
/-- Construct a cone for a right Kan extension `F' : D ⥤ H` of `F : C ⥤ H` along a functor
603+
`L : C ⥤ D` given a cone for `F`. -/
604+
@[simps]
605+
noncomputable def coneOfIsRightKanExtension (c : Cone F) : Cone F' where
606+
pt := c.pt
607+
π := F'.liftOfIsRightKanExtension α _ c.π
608+
609+
/-- If `c` is a limit cone for a functor `F : C ⥤ H` and `α : L ⋙ F' ⟶ F` is the counit of any
610+
right Kan extension `F' : D ⥤ H` of `F` along `L : C ⥤ D`, then `coneOfIsRightKanExtension α c` is
611+
a limit cone, too. -/
612+
@[simps]
613+
def isLimitConeOfIsRightKanExtension {c : Cone F} (hc : IsLimit c) :
614+
IsLimit (F'.coneOfIsRightKanExtension α c) where
615+
lift s := hc.lift (Cone.mk _ (whiskerLeft L s.π ≫ α))
616+
fac s := by
617+
have : (Functor.const _).map (hc.lift (Cone.mk _ (whiskerLeft L s.π ≫ α))) ≫
618+
F'.liftOfIsRightKanExtension α ((const D).obj c.pt) c.π = s.π :=
619+
F'.hom_ext_of_isRightKanExtension α _ _ (by aesop_cat)
620+
exact congr_app this
621+
uniq s m hm := hc.hom_ext (fun j ↦ by
622+
have := hm (L.obj j)
623+
nth_rw 1 [← F'.liftOfIsRightKanExtension_fac_app α ((const D).obj c.pt)]
624+
dsimp at this ⊢
625+
rw [← assoc, this, IsLimit.fac, NatTrans.comp_app, whiskerLeft_app])
626+
627+
variable [HasLimit F] [HasLimit F']
628+
629+
/-- If `F' : D ⥤ H` is a right Kan extension of `F : C ⥤ H` along `L : C ⥤ D`, the limit over `F'`
630+
is isomorphic to the limit over `F`. -/
631+
noncomputable def limitIsoOfIsRightKanExtension : limit F' ≅ limit F :=
632+
IsLimit.conePointUniqueUpToIso (limit.isLimit F')
633+
(F'.isLimitConeOfIsRightKanExtension α (limit.isLimit F))
634+
635+
@[reassoc (attr := simp)]
636+
lemma limitIsoOfIsRightKanExtension_inv_π (i : C) :
637+
(F'.limitIsoOfIsRightKanExtension α).inv ≫ limit.π F' (L.obj i) ≫ α.app i = limit.π F i := by
638+
simp [limitIsoOfIsRightKanExtension]
639+
640+
@[reassoc (attr := simp)]
641+
lemma limitIsoOfIsRightKanExtension_hom_π (i : C) :
642+
(F'.limitIsoOfIsRightKanExtension α).hom ≫ limit.π F i = limit.π F' (L.obj i) ≫ α.app i := by
643+
rw [← Iso.eq_inv_comp, limitIsoOfIsRightKanExtension_inv_π]
644+
645+
end Limit
646+
547647
end Functor
548648

549649
end CategoryTheory

0 commit comments

Comments
 (0)