Skip to content

Commit bdafeca

Browse files
committed
add top lemmas
1 parent d826df1 commit bdafeca

1 file changed

Lines changed: 24 additions & 14 deletions

File tree

Mathlib/GroupTheory/Finiteness.lean

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,10 @@ theorem isMulFG_def {M : Type*} [Mul M] :
6666

6767
namespace Monoid
6868

69+
variable {M : Type*} [Monoid M]
70+
6971
@[to_additive]
70-
theorem isMulFG_iff {M : Type*} [Monoid M] :
71-
IsMulFG M ↔ ∃ S : Finset M, Submonoid.closure (S : Set M) = ⊤ := by
72+
theorem isMulFG_iff : IsMulFG M ↔ ∃ S : Finset M, Submonoid.closure (S : Set M) = ⊤ := by
7273
classical
7374
simp_rw [isMulFG_def, SetLike.ext'_iff, Submonoid.closure_eq_one_union,
7475
Subsemigroup.coe_top, Submonoid.coe_top]
@@ -79,7 +80,7 @@ theorem isMulFG_iff {M : Type*} [Monoid M] :
7980
· exact Subsemigroup.closure_mono (by simp) hx
8081

8182
@[to_additive]
82-
theorem isMulFG_iff_finite {M : Type*} [Monoid M] :
83+
theorem isMulFG_iff_finite :
8384
IsMulFG M ↔ ∃ S : Set M, Submonoid.closure (S : Set M) = ⊤ ∧ S.Finite :=
8485
isMulFG_iff.trans
8586
fun ⟨S, hS⟩ ↦ ⟨S, hS, S.finite_toSet⟩, fun ⟨S, hS, hf⟩ ↦ ⟨hf.toFinset, by simpa⟩⟩
@@ -88,9 +89,10 @@ end Monoid
8889

8990
namespace Submonoid
9091

92+
variable {M : Type*} [Monoid M] {P : Submonoid M}
93+
9194
@[to_additive]
92-
theorem isMulFG_iff {M : Type*} [Monoid M] {P : Submonoid M} :
93-
IsMulFG P ↔ ∃ S : Finset M, Submonoid.closure (S : Set M) = P := by
95+
theorem isMulFG_iff : IsMulFG P ↔ ∃ S : Finset M, Submonoid.closure (S : Set M) = P := by
9496
classical
9597
simp_rw [Monoid.isMulFG_iff, ← (map_injective_of_injective P.subtype_injective).eq_iff,
9698
← MonoidHom.mrange_eq_map, mrange_subtype, MonoidHom.map_mclosure]
@@ -100,35 +102,40 @@ theorem isMulFG_iff {M : Type*} [Monoid M] {P : Submonoid M} :
100102
simpa [Set.image_preimage_eq_of_subset h]
101103

102104
@[to_additive]
103-
theorem isMulFG_iff_finite {M : Type*} [Monoid M] {P : Submonoid M} :
105+
theorem isMulFG_iff_finite :
104106
IsMulFG P ↔ ∃ S : Set M, Submonoid.closure (S : Set M) = P ∧ S.Finite :=
105107
isMulFG_iff.trans
106108
fun ⟨S, hS⟩ ↦ ⟨S, hS, S.finite_toSet⟩, fun ⟨S, hS, hf⟩ ↦ ⟨hf.toFinset, by simpa⟩⟩
107109

110+
@[to_additive (attr := simp)]
111+
theorem isMulFG_top_iff : IsMulFG (⊤ : Submonoid M) ↔ IsMulFG M :=
112+
isMulFG_iff.trans Monoid.isMulFG_iff.symm
113+
108114
end Submonoid
109115

110116
namespace Group
111117

118+
variable {G : Type*} [Group G]
119+
112120
@[to_additive]
113-
theorem isMulFG_iff {G : Type*} [Group G] :
114-
IsMulFG G ↔ ∃ S : Finset G, Subgroup.closure (S : Set G) = ⊤ := by
121+
theorem isMulFG_iff : IsMulFG G ↔ ∃ S : Finset G, Subgroup.closure (S : Set G) = ⊤ := by
115122
classical
116123
exact Monoid.isMulFG_iff.trans ⟨fun ⟨S, hS⟩ ↦ ⟨S, Subgroup.closure_eq_top_of_mclosure_eq_top hS⟩,
117124
fun ⟨S, hS⟩ ↦ ⟨S ∪ S⁻¹, by simp [← Subgroup.closure_toSubmonoid, hS]⟩⟩
118125

119126
@[to_additive]
120-
theorem isMulFG_iff_finite {G : Type*} [Group G] :
121-
IsMulFG G ↔ ∃ S : Set G, Subgroup.closure (S : Set G) = ⊤ ∧ S.Finite :=
127+
theorem isMulFG_iff_finite : IsMulFG G ↔ ∃ S : Set G, Subgroup.closure (S : Set G) = ⊤ ∧ S.Finite :=
122128
isMulFG_iff.trans
123129
fun ⟨S, hS⟩ ↦ ⟨S, hS, S.finite_toSet⟩, fun ⟨S, hS, hf⟩ ↦ ⟨hf.toFinset, by simpa⟩⟩
124130

125131
end Group
126132

127133
namespace Subgroup
128134

135+
variable {G : Type*} [Group G] {H : Subgroup G}
136+
129137
@[to_additive]
130-
theorem isMulFG_iff {G : Type*} [Group G] {H : Subgroup G} :
131-
IsMulFG H ↔ ∃ S : Finset G, Subgroup.closure (S : Set G) = H := by
138+
theorem isMulFG_iff : IsMulFG H ↔ ∃ S : Finset G, Subgroup.closure (S : Set G) = H := by
132139
classical
133140
simp_rw [Group.isMulFG_iff, ← Subgroup.map_subtype_inj,
134141
← MonoidHom.range_eq_map, range_subtype, MonoidHom.map_closure]
@@ -138,11 +145,14 @@ theorem isMulFG_iff {G : Type*} [Group G] {H : Subgroup G} :
138145
simpa [Set.image_preimage_eq_of_subset h]
139146

140147
@[to_additive]
141-
theorem isMulFG_iff_finite {G : Type*} [Group G] {H : Subgroup G} :
142-
IsMulFG H ↔ ∃ S : Set G, Subgroup.closure (S : Set G) = H ∧ S.Finite :=
148+
theorem isMulFG_iff_finite : IsMulFG H ↔ ∃ S : Set G, Subgroup.closure (S : Set G) = H ∧ S.Finite :=
143149
isMulFG_iff.trans
144150
fun ⟨S, hS⟩ ↦ ⟨S, hS, S.finite_toSet⟩, fun ⟨S, hS, hf⟩ ↦ ⟨hf.toFinset, by simpa⟩⟩
145151

152+
@[to_additive (attr := simp)]
153+
theorem isMulFG_top_iff : IsMulFG (⊤ : Subgroup G) ↔ IsMulFG G :=
154+
isMulFG_iff.trans Group.isMulFG_iff.symm
155+
146156
end Subgroup
147157

148158
end

0 commit comments

Comments
 (0)