@@ -151,6 +151,9 @@ lemma mem_carrier {s : subgroup G} {x : G} : x ∈ s.carrier ↔ x ∈ s := iff.
151
151
@[simp, to_additive]
152
152
lemma coe_to_submonoid (K : subgroup G) : (K.to_submonoid : set G) = K := rfl
153
153
154
+ @[simp, to_additive]
155
+ lemma mem_to_submonoid (K : subgroup G) (x : G) : x ∈ K.to_submonoid ↔ x ∈ K := iff.rfl
156
+
154
157
@[to_additive]
155
158
instance (K : subgroup G) [d : decidable_pred (∈ K)] [fintype G] : fintype K :=
156
159
show fintype {g : G // g ∈ K}, from infer_instance
619
622
lemma closure_singleton_one : closure ({1 } : set G) = ⊥ :=
620
623
by simp [eq_bot_iff_forall, mem_closure_singleton]
621
624
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
+
622
671
@[to_additive]
623
672
lemma mem_supr_of_directed {ι} [hι : nonempty ι] {K : ι → subgroup G} (hK : directed (≤) K)
624
673
{x : G} :
0 commit comments