Skip to content

Commit a34afbb

Browse files
committed
feat: port GroupTheory.Subgroup.Saturated (#1884)
Co-authored-by: Moritz Firsching <firsching@google.com>
1 parent 8e2f0be commit a34afbb

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,7 @@ import Mathlib.GroupTheory.Perm.ViaEmbedding
579579
import Mathlib.GroupTheory.Subgroup.Actions
580580
import Mathlib.GroupTheory.Subgroup.Basic
581581
import Mathlib.GroupTheory.Subgroup.MulOpposite
582+
import Mathlib.GroupTheory.Subgroup.Saturated
582583
import Mathlib.GroupTheory.Subgroup.Simple
583584
import Mathlib.GroupTheory.Subgroup.Zpowers
584585
import Mathlib.GroupTheory.Submonoid.Basic
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/-
2+
Copyright (c) 2021 Johan Commelin. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Johan Commelin
5+
6+
! This file was ported from Lean 3 source module group_theory.subgroup.saturated
7+
! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
8+
! Please do not edit these lines, except to modify the commit id
9+
! if you have ported upstream changes.
10+
-/
11+
import Mathlib.GroupTheory.Subgroup.Basic
12+
13+
/-!
14+
# Saturated subgroups
15+
16+
## Tags
17+
subgroup, subgroups
18+
19+
-/
20+
21+
22+
namespace Subgroup
23+
24+
variable {G : Type _} [Group G]
25+
26+
/-- A subgroup `H` of `G` is *saturated* if for all `n : ℕ` and `g : G` with `g^n ∈ H`
27+
we have `n = 0` or `g ∈ H`. -/
28+
@[to_additive
29+
"An additive subgroup `H` of `G` is *saturated* if for all `n : ℕ` and `g : G` with `n•g ∈ H`
30+
we have `n = 0` or `g ∈ H`."]
31+
def Saturated (H : Subgroup G) : Prop :=
32+
∀ ⦃n g⦄, g ^ n ∈ H → n = 0 ∨ g ∈ H
33+
#align subgroup.saturated Subgroup.Saturated
34+
#align add_subgroup.saturated AddSubgroup.Saturated
35+
36+
@[to_additive]
37+
theorem saturated_iff_npow {H : Subgroup G} :
38+
Saturated H ↔ ∀ (n : ℕ) (g : G), g ^ n ∈ H → n = 0 ∨ g ∈ H :=
39+
Iff.rfl
40+
#align subgroup.saturated_iff_npow Subgroup.saturated_iff_npow
41+
#align add_subgroup.saturated_iff_nsmul AddSubgroup.saturated_iff_nsmul
42+
43+
@[to_additive]
44+
theorem saturated_iff_zpow {H : Subgroup G} :
45+
Saturated H ↔ ∀ (n : ℤ) (g : G), g ^ n ∈ H → n = 0 ∨ g ∈ H := by
46+
constructor
47+
· intros hH n g hgn
48+
induction' n with n n
49+
· simp only [Int.coe_nat_eq_zero, Int.ofNat_eq_coe, zpow_ofNat] at hgn⊢
50+
exact hH hgn
51+
· suffices g ^ (n + 1) ∈ H by
52+
refine' (hH this).imp _ id
53+
simp only [IsEmpty.forall_iff, Nat.succ_ne_zero]
54+
simpa only [inv_mem_iff, zpow_negSucc] using hgn
55+
· intro h n g hgn
56+
specialize h n g
57+
simp only [Int.coe_nat_eq_zero, zpow_ofNat] at h
58+
apply h hgn
59+
#align subgroup.saturated_iff_zpow Subgroup.saturated_iff_zpow
60+
#align add_subgroup.saturated_iff_zsmul AddSubgroup.saturated_iff_zsmul
61+
62+
end Subgroup
63+
64+
namespace AddSubgroup
65+
66+
theorem ker_saturated {A₁ A₂ : Type _} [AddCommGroup A₁] [AddCommGroup A₂] [NoZeroSMulDivisors ℕ A₂]
67+
(f : A₁ →+ A₂) : f.ker.Saturated := by
68+
intro n g hg
69+
simpa only [f.mem_ker, nsmul_eq_smul, f.map_nsmul, smul_eq_zero] using hg
70+
#align add_subgroup.ker_saturated AddSubgroup.ker_saturated
71+
72+
end AddSubgroup

0 commit comments

Comments
 (0)