@@ -159,10 +159,56 @@ assume a ha, by induction ha; simp [h _, *, one_mem, mul_mem, inv_mem_iff]
159
159
lemma closure_subset_iff (s t : set α) [is_subgroup t] : closure s ⊆ t ↔ s ⊆ t :=
160
160
⟨assume h b ha, h (mem_closure ha), assume h b ha, closure_subset h ha⟩
161
161
162
+ theorem closure_mono {s t : set α} (h : s ⊆ t) : closure s ⊆ closure t :=
163
+ closure_subset $ set.subset.trans h subset_closure
164
+
165
+ theorem exists_list_of_mem_closure {s : set α} {a : α} (h : a ∈ closure s) :
166
+ (∃l:list α, (∀x∈l, x ∈ s ∨ x⁻¹ ∈ s) ∧ l.prod = a) :=
167
+ in_closure.rec_on h
168
+ (λ x hxs, ⟨[x], list.forall_mem_singleton.2 $ or.inl hxs, one_mul _⟩)
169
+ ⟨[], list.forall_mem_nil _, rfl⟩
170
+ (λ x _ ⟨L, HL1, HL2⟩, ⟨L.reverse.map has_inv.inv,
171
+ λ x hx, let ⟨y, hy1, hy2⟩ := list.exists_of_mem_map hx in
172
+ hy2 ▸ or.imp id (by rw [inv_inv]; exact id) (HL1 _ $ list.mem_reverse.1 hy1).symm,
173
+ HL2 ▸ list.rec_on L one_inv.symm (λ hd tl ih,
174
+ by rw [list.reverse_cons, list.map_append, list.prod_append, ih, list.map_singleton,
175
+ list.prod_cons, list.prod_nil, mul_one, list.prod_cons, mul_inv_rev])⟩)
176
+ (λ x y hx hy ⟨L1, HL1, HL2⟩ ⟨L2, HL3, HL4⟩, ⟨L1 ++ L2, list.forall_mem_append.2 ⟨HL1, HL3⟩,
177
+ by rw [list.prod_append, HL2, HL4]⟩)
178
+
179
+ theorem mclosure_subset {s : set α} : monoid.closure s ⊆ closure s :=
180
+ monoid.closure_subset $ subset_closure
181
+
182
+ theorem mclosure_inv_subset {s : set α} : monoid.closure (has_inv.inv ⁻¹' s) ⊆ closure s :=
183
+ monoid.closure_subset $ λ x hx, inv_inv x ▸ (is_subgroup.inv_mem $ subset_closure hx)
184
+
185
+ theorem closure_eq_mclosure {s : set α} : closure s = monoid.closure (s ∪ has_inv.inv ⁻¹' s) :=
186
+ set.subset.antisymm
187
+ (@closure_subset _ _ _ (monoid.closure (s ∪ has_inv.inv ⁻¹' s))
188
+ { inv_mem := λ x hx, monoid.in_closure.rec_on hx
189
+ (λ x hx, or.cases_on hx (λ hx, monoid.subset_closure $ or.inr $ show x⁻¹⁻¹ ∈ s, from (inv_inv x).symm ▸ hx)
190
+ (λ hx, monoid.subset_closure $ or.inl hx))
191
+ ((@one_inv α _).symm ▸ is_submonoid.one_mem _)
192
+ (λ x y hx hy ihx ihy, (mul_inv_rev x y).symm ▸ is_submonoid.mul_mem ihy ihx) }
193
+ (set.subset.trans (set.subset_union_left _ _) monoid.subset_closure))
194
+ (monoid.closure_subset $ set.union_subset subset_closure $ λ x hx, inv_inv x ▸ (is_subgroup.inv_mem $ subset_closure hx))
195
+
196
+ theorem mem_closure_union_iff {α : Type *} [comm_group α] {s t : set α} {x : α} :
197
+ x ∈ closure (s ∪ t) ↔ ∃ y ∈ closure s, ∃ z ∈ closure t, y * z = x :=
198
+ begin
199
+ simp only [closure_eq_mclosure, monoid.mem_closure_union_iff, exists_prop, preimage_union], split,
200
+ { rintro ⟨_, ⟨ys, hys, yt, hyt, rfl⟩, _, ⟨zs, hzs, zt, hzt, rfl⟩, rfl⟩,
201
+ refine ⟨_, ⟨_, hys, _, hzs, rfl⟩, _, ⟨_, hyt, _, hzt, rfl⟩, _⟩,
202
+ rw [mul_assoc, mul_assoc, mul_left_comm zs], refl },
203
+ { rintro ⟨_, ⟨ys, hys, zs, hzs, rfl⟩, _, ⟨yt, hyt, zt, hzt, rfl⟩, rfl⟩,
204
+ refine ⟨_, ⟨ys, hys, yt, hyt, rfl⟩, _, ⟨zs, hzs, zt, hzt, rfl⟩, _⟩,
205
+ rw [mul_assoc, mul_assoc, mul_left_comm yt], refl }
206
+ end
207
+
162
208
theorem gpowers_eq_closure {a : α} : gpowers a = closure {a} :=
163
209
subset.antisymm
164
210
(assume x h, match x, h with _, ⟨i, rfl⟩ := gpow_mem (mem_closure $ by simp) end )
165
- (closure_subset $ by simp [mem_gpowers])
211
+ (closure_subset $ by simp [mem_gpowers])
166
212
167
213
end group
168
214
@@ -202,6 +248,26 @@ theorem in_closure.rec_on {C : α → Prop}
202
248
C a :=
203
249
group.in_closure.rec_on H (λ _, H1) H2 (λ _, H3) (λ _ _, H4)
204
250
251
+ theorem closure_mono {s t : set α} (h : s ⊆ t) : closure s ⊆ closure t :=
252
+ closure_subset $ set.subset.trans h subset_closure
253
+
254
+ theorem exists_list_of_mem_closure {s : set α} {a : α} (h : a ∈ closure s) :
255
+ (∃l:list α, (∀x∈l, x ∈ s ∨ -x ∈ s) ∧ l.sum = a) :=
256
+ group.exists_list_of_mem_closure h
257
+
258
+ theorem mclosure_subset {s : set α} : add_monoid.closure s ⊆ closure s :=
259
+ group.mclosure_subset
260
+
261
+ theorem mclosure_inv_subset {s : set α} : add_monoid.closure (has_neg.neg ⁻¹' s) ⊆ closure s :=
262
+ group.mclosure_inv_subset
263
+
264
+ theorem closure_eq_mclosure {s : set α} : closure s = add_monoid.closure (s ∪ has_neg.neg ⁻¹' s) :=
265
+ group.closure_eq_mclosure
266
+
267
+ theorem mem_closure_union_iff {α : Type *} [add_comm_group α] {s t : set α} {x : α} :
268
+ x ∈ closure (s ∪ t) ↔ ∃ y ∈ closure s, ∃ z ∈ closure t, y + z = x :=
269
+ group.mem_closure_union_iff
270
+
205
271
end add_group
206
272
207
273
class normal_subgroup [group α] (s : set α) extends is_subgroup s : Prop :=
0 commit comments