File: Mathlib/GroupTheory/PGroup.lean

full_name: IsPGroup
code: /-- A p-group is a group in which every element has prime power order -/
def IsPGroup : Prop 
goal: Prop

full_name: IsPGroup.iff_orderOf
code: theorem iff_orderOf [hp : Fact p.Prime] : IsPGroup p G ↔ ∀ g : G, ∃ k : ℕ, orderOf g = p ^ k 
goal: IsPGroup p G ↔ ∀ (g : G), ∃ k, orderOf g = p ^ k

full_name: IsPGroup.of_card
code: theorem of_card {n : ℕ} (hG : Nat.card G = p ^ n) : IsPGroup p G 
goal: IsPGroup p G

full_name: IsPGroup.of_bot
code: theorem of_bot : IsPGroup p (⊥ : Subgroup G) 
goal: IsPGroup p ↥⊥

full_name: IsPGroup.iff_card
code: theorem iff_card [Fact p.Prime] [Finite G] : IsPGroup p G ↔ ∃ n : ℕ, Nat.card G = p ^ n 
goal: IsPGroup p G ↔ ∃ n, Nat.card G = p ^ n

full_name: IsPGroup.of_injective
code: theorem of_injective {H : Type*} [Group H] (ϕ : H →* G) (hϕ : Function.Injective ϕ) :
    IsPGroup p H 
goal: IsPGroup p H

full_name: IsPGroup.to_subgroup
code: theorem to_subgroup (H : Subgroup G) : IsPGroup p H 
goal: IsPGroup p ↥H

full_name: IsPGroup.of_surjective
code: theorem of_surjective {H : Type*} [Group H] (ϕ : G →* H) (hϕ : Function.Surjective ϕ) :
    IsPGroup p H 
goal: IsPGroup p H

full_name: IsPGroup.to_quotient
code: theorem to_quotient (H : Subgroup G) [H.Normal] : IsPGroup p (G ⧸ H) 
goal: IsPGroup p (G ⧸ H)

full_name: IsPGroup.of_equiv
code: theorem of_equiv {H : Type*} [Group H] (ϕ : G ≃* H) : IsPGroup p H 
goal: IsPGroup p H

full_name: IsPGroup.orderOf_coprime
code: theorem orderOf_coprime {n : ℕ} (hn : p.Coprime n) (g : G) : (orderOf g).Coprime n 
goal: (orderOf g).Coprime n

full_name: IsPGroup.powEquiv
code: /-- If `gcd(p,n) = 1`, then the `n`th power map is a bijection. -/
noncomputable def powEquiv {n : ℕ} (hn : p.Coprime n) : G ≃ G 
goal: G ≃ G

full_name: IsPGroup.powEquiv_apply
code: @[simp]
theorem powEquiv_apply {n : ℕ} (hn : p.Coprime n) (g : G) : hG.powEquiv hn g = g ^ n 
goal: (hG.powEquiv hn) g = g ^ n

full_name: IsPGroup.powEquiv_symm_apply
code: @[simp]
theorem powEquiv_symm_apply {n : ℕ} (hn : p.Coprime n) (g : G) :
    (hG.powEquiv hn).symm g = g ^ (orderOf g).gcdB n 
goal: (hG.powEquiv hn).symm g = g ^ (orderOf g).gcdB n

full_name: IsPGroup.powEquiv'
code: /-- If `p ∤ n`, then the `n`th power map is a bijection. -/
noncomputable abbrev powEquiv' {n : ℕ} (hn : ¬p ∣ n) : G ≃ G 
goal: G ≃ G

full_name: IsPGroup.index
code: theorem index (H : Subgroup G) [H.FiniteIndex] : ∃ n : ℕ, H.index = p ^ n 
goal: ∃ n, H.index = p ^ n

full_name: IsPGroup.card_eq_or_dvd
code: theorem card_eq_or_dvd : Nat.card G = 1 ∨ p ∣ Nat.card G 
goal: Nat.card G = 1 ∨ p ∣ Nat.card G

full_name: IsPGroup.nontrivial_iff_card
code: theorem nontrivial_iff_card [Finite G] : Nontrivial G ↔ ∃ n > 0, Nat.card G = p ^ n 
goal: Nontrivial G ↔ ∃ n > 0, Nat.card G = p ^ n

full_name: IsPGroup.card_orbit
code: theorem card_orbit (a : α) [Finite (orbit G a)] : ∃ n : ℕ, Nat.card (orbit G a) = p ^ n 
goal: ∃ n, Nat.card ↑(MulAction.orbit G a) = p ^ n

full_name: IsPGroup.card_modEq_card_fixedPoints
code: /-- If `G` is a `p`-group acting on a finite set `α`, then the number of fixed points
  of the action is congruent mod `p` to the cardinality of `α` -/
theorem card_modEq_card_fixedPoints : Nat.card α ≡ Nat.card (fixedPoints G α) [MOD p] 
goal: Nat.card α ≡ Nat.card ↑(MulAction.fixedPoints G α) [MOD p]

full_name: IsPGroup.nonempty_fixed_point_of_prime_not_dvd_card
code: /-- If a p-group acts on `α` and the cardinality of `α` is not a multiple
  of `p` then the action has a fixed point. -/
theorem nonempty_fixed_point_of_prime_not_dvd_card (hpα : ¬p ∣ Nat.card α) :
    (fixedPoints G α).Nonempty 
goal: (MulAction.fixedPoints G α).Nonempty

full_name: IsPGroup.exists_fixed_point_of_prime_dvd_card_of_fixed_point
code: /-- If a p-group acts on `α` and the cardinality of `α` is a multiple
  of `p`, and the action has one fixed point, then it has another fixed point. -/
theorem exists_fixed_point_of_prime_dvd_card_of_fixed_point (hpα : p ∣ Nat.card α) {a : α}
    (ha : a ∈ fixedPoints G α) : ∃ b, b ∈ fixedPoints G α ∧ a ≠ b 
goal: ∃ b ∈ MulAction.fixedPoints G α, a ≠ b

full_name: IsPGroup.center_nontrivial
code: theorem center_nontrivial [Nontrivial G] [Finite G] : Nontrivial (Subgroup.center G) 
goal: Nontrivial ↥(Subgroup.center G)

full_name: IsPGroup.bot_lt_center
code: theorem bot_lt_center [Nontrivial G] [Finite G] : ⊥ < Subgroup.center G 
goal: ⊥ < Subgroup.center G

full_name: IsPGroup.to_le
code: theorem to_le {H K : Subgroup G} (hK : IsPGroup p K) (hHK : H ≤ K) : IsPGroup p H 
goal: IsPGroup p ↥H

full_name: IsPGroup.to_inf_left
code: theorem to_inf_left {H K : Subgroup G} (hH : IsPGroup p H) : IsPGroup p (H ⊓ K : Subgroup G) 
goal: IsPGroup p ↥(H ⊓ K)

full_name: IsPGroup.to_inf_right
code: theorem to_inf_right {H K : Subgroup G} (hK : IsPGroup p K) : IsPGroup p (H ⊓ K : Subgroup G) 
goal: IsPGroup p ↥(H ⊓ K)

full_name: IsPGroup.map
code: theorem map {H : Subgroup G} (hH : IsPGroup p H) {K : Type*} [Group K] (ϕ : G →* K) :
    IsPGroup p (H.map ϕ) 
goal: IsPGroup p ↥(Subgroup.map ϕ H)

full_name: IsPGroup.comap_of_ker_isPGroup
code: theorem comap_of_ker_isPGroup {H : Subgroup G} (hH : IsPGroup p H) {K : Type*} [Group K]
    (ϕ : K →* G) (hϕ : IsPGroup p ϕ.ker) : IsPGroup p (H.comap ϕ) 
goal: IsPGroup p ↥(Subgroup.comap ϕ H)

full_name: IsPGroup.ker_isPGroup_of_injective
code: theorem ker_isPGroup_of_injective {K : Type*} [Group K] {ϕ : K →* G} (hϕ : Function.Injective ϕ) :
    IsPGroup p ϕ.ker 
goal: IsPGroup p ↥ϕ.ker

full_name: IsPGroup.comap_of_injective
code: theorem comap_of_injective {H : Subgroup G} (hH : IsPGroup p H) {K : Type*} [Group K] (ϕ : K →* G)
    (hϕ : Function.Injective ϕ) : IsPGroup p (H.comap ϕ) 
goal: IsPGroup p ↥(Subgroup.comap ϕ H)

full_name: IsPGroup.comap_subtype
code: theorem comap_subtype {H : Subgroup G} (hH : IsPGroup p H) {K : Subgroup G} :
    IsPGroup p (H.comap K.subtype) 
goal: IsPGroup p ↥(Subgroup.comap K.subtype H)

full_name: IsPGroup.to_sup_of_normal_right
code: theorem to_sup_of_normal_right {H K : Subgroup G} (hH : IsPGroup p H) (hK : IsPGroup p K)
    [K.Normal] : IsPGroup p (H ⊔ K : Subgroup G) 
goal: IsPGroup p ↥(H ⊔ K)

full_name: IsPGroup.to_sup_of_normal_left
code: theorem to_sup_of_normal_left {H K : Subgroup G} (hH : IsPGroup p H) (hK : IsPGroup p K)
    [H.Normal] : IsPGroup p (H ⊔ K : Subgroup G) 
goal: IsPGroup p ↥(H ⊔ K)

full_name: IsPGroup.to_sup_of_normal_right'
code: theorem to_sup_of_normal_right' {H K : Subgroup G} (hH : IsPGroup p H) (hK : IsPGroup p K)
    (hHK : H ≤ K.normalizer) : IsPGroup p (H ⊔ K : Subgroup G) 
goal: IsPGroup p ↥(H ⊔ K)

full_name: IsPGroup.to_sup_of_normal_left'
code: theorem to_sup_of_normal_left' {H K : Subgroup G} (hH : IsPGroup p H) (hK : IsPGroup p K)
    (hHK : K ≤ H.normalizer) : IsPGroup p (H ⊔ K : Subgroup G) 
goal: IsPGroup p ↥(H ⊔ K)

full_name: IsPGroup.coprime_card_of_ne
code: /-- finite p-groups with different p have coprime orders -/
theorem coprime_card_of_ne {G₂ : Type*} [Group G₂] (p₁ p₂ : ℕ) [hp₁ : Fact p₁.Prime]
    [hp₂ : Fact p₂.Prime] (hne : p₁ ≠ p₂) (H₁ : Subgroup G) (H₂ : Subgroup G₂) [Finite H₁]
    [Finite H₂] (hH₁ : IsPGroup p₁ H₁) (hH₂ : IsPGroup p₂ H₂) :
    Nat.Coprime (Nat.card H₁) (Nat.card H₂) 
goal: (Nat.card ↥H₁).Coprime (Nat.card ↥H₂)

full_name: IsPGroup.disjoint_of_ne
code: /-- p-groups with different p are disjoint -/
theorem disjoint_of_ne (p₁ p₂ : ℕ) [hp₁ : Fact p₁.Prime] [hp₂ : Fact p₂.Prime] (hne : p₁ ≠ p₂)
    (H₁ H₂ : Subgroup G) (hH₁ : IsPGroup p₁ H₁) (hH₂ : IsPGroup p₂ H₂) : Disjoint H₁ H₂ 
goal: Disjoint H₁ H₂

full_name: IsPGroup.card_center_eq_prime_pow
code: /-- The cardinality of the `center` of a `p`-group is `p ^ k` where `k` is positive. -/
theorem card_center_eq_prime_pow (hn : 0 < n) :
    ∃ k > 0, Nat.card (center G) = p ^ k 
goal: ∃ k > 0, Nat.card ↥(Subgroup.center G) = p ^ k

full_name: IsPGroup.cyclic_center_quotient_of_card_eq_prime_sq
code: /-- The quotient by the center of a group of cardinality `p ^ 2` is cyclic. -/
theorem cyclic_center_quotient_of_card_eq_prime_sq (hG : Nat.card G = p ^ 2) :
    IsCyclic (G ⧸ center G) 
goal: IsCyclic (G ⧸ Subgroup.center G)

full_name: IsPGroup.commGroupOfCardEqPrimeSq
code: /-- A group of order `p ^ 2` is commutative. See also `IsPGroup.commutative_of_card_eq_prime_sq`
for just the proof that `∀ a b, a * b = b * a` -/
def commGroupOfCardEqPrimeSq (hG : Nat.card G = p ^ 2) : CommGroup G 
goal: CommGroup G

full_name: IsPGroup.commutative_of_card_eq_prime_sq
code: /-- A group of order `p ^ 2` is commutative. See also `IsPGroup.commGroupOfCardEqPrimeSq`
for the `CommGroup` instance. -/
theorem commutative_of_card_eq_prime_sq (hG : Nat.card G = p ^ 2) : ∀ a b : G, a * b = b * a 
goal: a * b = b * a