Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 5a1cbe3

Browse files
committed
feat(linear_algebra,algebra,group_theory): miscellaneous lemmas linking some additive monoid and module operations (#11525)
This adds: * `submodule.map_to_add_submonoid` * `submodule.sup_to_add_submonoid` * `submodule.supr_to_add_submonoid` As well as some missing `add_submonoid` lemmas copied from the `submodule` API: * `add_submonoid.closure_singleton_le_iff_mem` * `add_submonoid.mem_supr` * `add_submonoid.supr_eq_closure` Finally, it generalizes some indices in `supr` and `infi` lemmas from `Type*` to `Sort*`. This is pre-work for removing a redundant hypothesis from `submodule.mul_induction_on`.
1 parent a0ff65d commit 5a1cbe3

File tree

3 files changed

+77
-5
lines changed

3 files changed

+77
-5
lines changed

src/algebra/algebra/bilinear.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,18 @@ variables (R)
5151
def lmul_left (r : A) : A →ₗ[R] A :=
5252
lmul R A r
5353

54+
@[simp] lemma lmul_left_to_add_monoid_hom (r : A) :
55+
(lmul_left R r : A →+ A) = add_monoid_hom.mul_left r :=
56+
fun_like.coe_injective rfl
57+
5458
/-- The multiplication on the right in an algebra is a linear map. -/
5559
def lmul_right (r : A) : A →ₗ[R] A :=
5660
(lmul R A).to_linear_map.flip r
5761

62+
@[simp] lemma lmul_right_to_add_monoid_hom (r : A) :
63+
(lmul_right R r : A →+ A) = add_monoid_hom.mul_right r :=
64+
fun_like.coe_injective rfl
65+
5866
/-- Simultaneous multiplication on the left and right is a linear map. -/
5967
def lmul_left_right (vw: A × A) : A →ₗ[R] A :=
6068
(lmul_right R vw.2).comp (lmul_left R vw.1)

src/group_theory/submonoid/basic.lean

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,24 @@ lemma closure_union (s t : set M) : closure (s ∪ t) = closure s ⊔ closure t
318318
lemma closure_Union {ι} (s : ι → set M) : closure (⋃ i, s i) = ⨆ i, closure (s i) :=
319319
(submonoid.gi M).gc.l_supr
320320

321+
@[simp, to_additive]
322+
lemma closure_singleton_le_iff_mem (m : M) (p : submonoid M) :
323+
closure {m} ≤ p ↔ m ∈ p :=
324+
by rw [closure_le, singleton_subset_iff, set_like.mem_coe]
325+
326+
@[to_additive]
327+
lemma mem_supr {ι : Sort*} (p : ι → submonoid M) {m : M} :
328+
(m ∈ ⨆ i, p i) ↔ (∀ N, (∀ i, p i ≤ N) → m ∈ N) :=
329+
begin
330+
rw [← closure_singleton_le_iff_mem, le_supr_iff],
331+
simp only [closure_singleton_le_iff_mem],
332+
end
333+
334+
@[to_additive]
335+
lemma supr_eq_closure {ι : Sort*} (p : ι → submonoid M) :
336+
(⨆ i, p i) = submonoid.closure (⋃ i, (p i : set M)) :=
337+
by simp_rw [submonoid.closure_Union, submonoid.closure_eq]
338+
321339
end submonoid
322340

323341
namespace monoid_hom

src/linear_algebra/basic.lean

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,10 @@ def map (f : M →ₛₗ[σ₁₂] M₂) (p : submodule R M) : submodule R₂ M
556556
@[simp] lemma map_coe (f : M →ₛₗ[σ₁₂] M₂) (p : submodule R M) :
557557
(map f p : set M₂) = f '' p := rfl
558558

559+
lemma map_to_add_submonoid (f : M →ₛₗ[σ₁₂] M₂) (p : submodule R M) :
560+
(p.map f).to_add_submonoid = p.to_add_submonoid.map f :=
561+
set_like.coe_injective rfl
562+
559563
@[simp] lemma mem_map {f : M →ₛₗ[σ₁₂] M₂} {p : submodule R M} {x : M₂} :
560564
x ∈ map f p ↔ ∃ y, y ∈ p ∧ f y = x := iff.rfl
561565

@@ -697,15 +701,15 @@ lemma map_sup_comap_of_surjective (p q : submodule R₂ M₂) :
697701
(p.comap f ⊔ q.comap f).map f = p ⊔ q :=
698702
(gi_map_comap hf).l_sup_u _ _
699703

700-
lemma map_supr_comap_of_sujective (S : ι → submodule R₂ M₂) :
704+
lemma map_supr_comap_of_sujective {ι : Sort*} (S : ι → submodule R₂ M₂) :
701705
(⨆ i, (S i).comap f).map f = supr S :=
702706
(gi_map_comap hf).l_supr_u _
703707

704708
lemma map_inf_comap_of_surjective (p q : submodule R₂ M₂) :
705709
(p.comap f ⊓ q.comap f).map f = p ⊓ q :=
706710
(gi_map_comap hf).l_inf_u _ _
707711

708-
lemma map_infi_comap_of_surjective (S : ι → submodule R₂ M₂) :
712+
lemma map_infi_comap_of_surjective {ι : Sort*} (S : ι → submodule R₂ M₂) :
709713
(⨅ i, (S i).comap f).map f = infi S :=
710714
(gi_map_comap hf).l_infi_u _
711715

@@ -739,13 +743,15 @@ lemma map_injective_of_injective : function.injective (map f) :=
739743
lemma comap_inf_map_of_injective (p q : submodule R M) : (p.map f ⊓ q.map f).comap f = p ⊓ q :=
740744
(gci_map_comap hf).u_inf_l _ _
741745

742-
lemma comap_infi_map_of_injective (S : ι → submodule R M) : (⨅ i, (S i).map f).comap f = infi S :=
746+
lemma comap_infi_map_of_injective {ι : Sort*} (S : ι → submodule R M) :
747+
(⨅ i, (S i).map f).comap f = infi S :=
743748
(gci_map_comap hf).u_infi_l _
744749

745750
lemma comap_sup_map_of_injective (p q : submodule R M) : (p.map f ⊔ q.map f).comap f = p ⊔ q :=
746751
(gci_map_comap hf).u_sup_l _ _
747752

748-
lemma comap_supr_map_of_injective (S : ι → submodule R M) : (⨆ i, (S i).map f).comap f = supr S :=
753+
lemma comap_supr_map_of_injective {ι : Sort*} (S : ι → submodule R M) :
754+
(⨆ i, (S i).map f).comap f = supr S :=
749755
(gci_map_comap hf).u_supr_l _
750756

751757
lemma map_le_map_iff_of_injective (p q : submodule R M) : p.map f ≤ q.map f ↔ p ≤ q :=
@@ -772,7 +778,7 @@ lemma eq_zero_of_bot_submodule : ∀(b : (⊥ : submodule R M)), b = 0
772778

773779
/-- The infimum of a family of invariant submodule of an endomorphism is also an invariant
774780
submodule. -/
775-
lemma _root_.linear_map.infi_invariant {σ : R →+* R} [ring_hom_surjective σ] {ι : Type*}
781+
lemma _root_.linear_map.infi_invariant {σ : R →+* R} [ring_hom_surjective σ] {ι : Sort*}
776782
(f : M →ₛₗ[σ] M) {p : ι → submodule R M} (hf : ∀ i, ∀ v ∈ (p i), f v ∈ p i) :
777783
∀ v ∈ infi p, f v ∈ infi p :=
778784
begin
@@ -1021,9 +1027,28 @@ by rintro ⟨y, hy, z, hz, rfl⟩; exact add_mem _
10211027
lemma mem_sup' : x ∈ p ⊔ p' ↔ ∃ (y : p) (z : p'), (y:M) + z = x :=
10221028
mem_sup.trans $ by simp only [set_like.exists, coe_mk]
10231029

1030+
variables (p p')
1031+
10241032
lemma coe_sup : ↑(p ⊔ p') = (p + p' : set M) :=
10251033
by { ext, rw [set_like.mem_coe, mem_sup, set.mem_add], simp, }
10261034

1035+
lemma sup_to_add_submonoid :
1036+
(p ⊔ p').to_add_submonoid = p.to_add_submonoid ⊔ p'.to_add_submonoid :=
1037+
begin
1038+
ext x,
1039+
rw [mem_to_add_submonoid, mem_sup, add_submonoid.mem_sup],
1040+
refl,
1041+
end
1042+
1043+
lemma sup_to_add_subgroup {R M : Type*} [ring R] [add_comm_group M] [module R M]
1044+
(p p' : submodule R M) :
1045+
(p ⊔ p').to_add_subgroup = p.to_add_subgroup ⊔ p'.to_add_subgroup :=
1046+
begin
1047+
ext x,
1048+
rw [mem_to_add_subgroup, mem_sup, add_subgroup.mem_sup],
1049+
refl,
1050+
end
1051+
10271052
end
10281053

10291054
/- This is the character `∙`, with escape sequence `\.`, and is thus different from the scalar
@@ -1176,6 +1201,27 @@ le_antisymm
11761201
(supr_le $ assume i, subset.trans (assume m hm, set.mem_Union.mpr ⟨i, hm⟩) subset_span)
11771202
(span_le.mpr $ Union_subset_iff.mpr $ assume i m hm, mem_supr_of_mem i hm)
11781203

1204+
lemma supr_to_add_submonoid {ι : Sort*} (p : ι → submodule R M) :
1205+
(⨆ i, p i).to_add_submonoid = ⨆ i, (p i).to_add_submonoid :=
1206+
begin
1207+
refine le_antisymm (λ x, _) (supr_le $ λ i, to_add_submonoid_mono $ le_supr _ i),
1208+
simp_rw [supr_eq_span, add_submonoid.supr_eq_closure, mem_to_add_submonoid, coe_to_add_submonoid],
1209+
intros hx,
1210+
refine submodule.span_induction hx (λ x hx, _) _ (λ x y hx hy, _) (λ r x hx, _),
1211+
{ exact add_submonoid.subset_closure hx },
1212+
{ exact add_submonoid.zero_mem _ },
1213+
{ exact add_submonoid.add_mem _ hx hy },
1214+
{ apply add_submonoid.closure_induction hx,
1215+
{ rintros x ⟨_, ⟨i, rfl⟩, hix : x ∈ p i⟩,
1216+
apply add_submonoid.subset_closure (set.mem_Union.mpr ⟨i, _⟩),
1217+
exact smul_mem _ r hix },
1218+
{ rw smul_zero,
1219+
exact add_submonoid.zero_mem _ },
1220+
{ intros x y hx hy,
1221+
rw smul_add,
1222+
exact add_submonoid.add_mem _ hx hy, } }
1223+
end
1224+
11791225
lemma span_singleton_le_iff_mem (m : M) (p : submodule R M) : (R ∙ m) ≤ p ↔ m ∈ p :=
11801226
by rw [span_le, singleton_subset_iff, set_like.mem_coe]
11811227

0 commit comments

Comments
 (0)