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

Commit b401f07

Browse files
feat(src/group_theory/subgroup): add closure.submonoid.closure (#7328)
`subgroup.closure S` equals `submonoid.closure (S ∪ S⁻¹)`.
1 parent aff758e commit b401f07

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

src/group_theory/subgroup.lean

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ lemma mem_carrier {s : subgroup G} {x : G} : x ∈ s.carrier ↔ x ∈ s := iff.
151151
@[simp, to_additive]
152152
lemma coe_to_submonoid (K : subgroup G) : (K.to_submonoid : set G) = K := rfl
153153

154+
@[simp, to_additive]
155+
lemma mem_to_submonoid (K : subgroup G) (x : G) : x ∈ K.to_submonoid ↔ x ∈ K := iff.rfl
156+
154157
@[to_additive]
155158
instance (K : subgroup G) [d : decidable_pred (∈ K)] [fintype G] : fintype K :=
156159
show fintype {g : G // g ∈ K}, from infer_instance
@@ -619,6 +622,52 @@ end
619622
lemma closure_singleton_one : closure ({1} : set G) = ⊥ :=
620623
by simp [eq_bot_iff_forall, mem_closure_singleton]
621624

625+
@[simp, to_additive] lemma inv_subset_closure (S : set G) : S⁻¹ ⊆ closure S :=
626+
begin
627+
intros s hs,
628+
rw [set_like.mem_coe, ←subgroup.inv_mem_iff],
629+
exact subset_closure (mem_inv.mp hs),
630+
end
631+
632+
@[simp, to_additive] lemma closure_inv (S : set G) : closure S⁻¹ = closure S :=
633+
begin
634+
refine le_antisymm ((subgroup.closure_le _).2 _) ((subgroup.closure_le _).2 _),
635+
{ exact inv_subset_closure S },
636+
{ simpa only [set.inv_inv] using inv_subset_closure S⁻¹ },
637+
end
638+
639+
@[to_additive]
640+
lemma closure_to_submonoid (S : set G) :
641+
(closure S).to_submonoid = submonoid.closure (S ∪ S⁻¹) :=
642+
begin
643+
refine le_antisymm _ (submonoid.closure_le.2 _),
644+
{ intros x hx,
645+
refine closure_induction hx (λ x hx, submonoid.closure_mono (subset_union_left S S⁻¹)
646+
(submonoid.subset_closure hx)) (submonoid.one_mem _) (λ x y hx hy, submonoid.mul_mem _ hx hy)
647+
(λ x hx, _),
648+
rwa [←submonoid.mem_closure_inv, set.union_inv, set.inv_inv, set.union_comm] },
649+
{ simp only [true_and, coe_to_submonoid, union_subset_iff, subset_closure, inv_subset_closure] }
650+
end
651+
652+
/-- An induction principle for closure membership. If `p` holds for `1` and all elements of
653+
`k` and their inverse, and is preserved under multiplication, then `p` holds for all elements of
654+
the closure of `k`. -/
655+
@[to_additive "An induction principle for additive closure membership. If `p` holds for `0` and all
656+
elements of `k` and their negation, and is preserved under addition, then `p` holds for all
657+
elements of the additive closure of `k`."]
658+
lemma closure_induction'' {p : G → Prop} {x} (h : x ∈ closure k)
659+
(Hk : ∀ x ∈ k, p x) (Hk_inv : ∀ x ∈ k, p x⁻¹) (H1 : p 1)
660+
(Hmul : ∀ x y, p x → p y → p (x * y)) : p x :=
661+
begin
662+
rw [← mem_to_submonoid, closure_to_submonoid k] at h,
663+
refine submonoid.closure_induction h (λ x hx, _) H1 (λ x y hx hy, Hmul x y hx hy),
664+
{ rw [mem_union, mem_inv] at hx,
665+
cases hx with mem invmem,
666+
{ exact Hk x mem },
667+
{ rw [← inv_inv x],
668+
exact Hk_inv _ invmem } },
669+
end
670+
622671
@[to_additive]
623672
lemma mem_supr_of_directed {ι} [hι : nonempty ι] {K : ι → subgroup G} (hK : directed (≤) K)
624673
{x : G} :

src/group_theory/submonoid/membership.lean

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Amelia Livingston, Yury Kudryashov
77
import group_theory.submonoid.operations
88
import algebra.big_operators.basic
99
import algebra.free_monoid
10+
import algebra.pointwise
1011

1112
/-!
1213
# Submonoids: membership criteria
@@ -315,6 +316,24 @@ lemma mul_left_mem_add_closure (ha : a ∈ S) (hb : b ∈ add_submonoid.closure
315316
a * b ∈ add_submonoid.closure (S : set R) :=
316317
S.mul_mem_add_closure (add_submonoid.mem_closure.mpr (λ sT hT, hT ha)) hb
317318

319+
@[to_additive]
320+
lemma mem_closure_inv {G : Type*} [group G] (S : set G) (x : G) :
321+
x ∈ submonoid.closure S⁻¹ ↔ x⁻¹ ∈ submonoid.closure S :=
322+
begin
323+
suffices : ∀ (S : set G) (x : G), x ∈ submonoid.closure S⁻¹ → x⁻¹ ∈ submonoid.closure S,
324+
{ refine ⟨this S x, _⟩,
325+
have := this S⁻¹ x⁻¹,
326+
rw [inv_inv, set.inv_inv] at this,
327+
exact this, },
328+
intros S x hx,
329+
refine submonoid.closure_induction hx (λ x hx, _) _ (λ x y hx hy, _),
330+
{ exact submonoid.subset_closure (set.mem_inv.mp hx), },
331+
{ rw one_inv,
332+
exact submonoid.one_mem _ },
333+
{ rw mul_inv_rev x y,
334+
exact submonoid.mul_mem _ hy hx },
335+
end
336+
318337
end submonoid
319338

320339
section mul_add

0 commit comments

Comments
 (0)