File: Mathlib/GroupTheory/Sylow.lean

full_name: Sylow.isPGroup'
code: /-- A Sylow `p`-subgroup is a maximal `p`-subgroup. -/
structure Sylow extends Subgroup G where
  isPGroup' : IsPGroup p toSubgroup
  is_maximal' : ∀ {Q : Subgroup G}, IsPGroup p Q → toSubgroup ≤ Q → Q = toSubgroup
goal: IsPGroup p ↥↑self

full_name: Sylow
code: /-- A Sylow `p`-subgroup is a maximal `p`-subgroup. -/
structure Sylow extends Subgroup G where
  isPGroup' : IsPGroup p toSubgroup
  is_maximal' : ∀ {Q : Subgroup G}, IsPGroup p Q → toSubgroup ≤ Q → Q = toSubgroup
goal: Type u_1

full_name: Sylow.is_maximal'
code: /-- A Sylow `p`-subgroup is a maximal `p`-subgroup. -/
structure Sylow extends Subgroup G where
  isPGroup' : IsPGroup p toSubgroup
  is_maximal' : ∀ {Q : Subgroup G}, IsPGroup p Q → toSubgroup ≤ Q → Q = toSubgroup
goal: IsPGroup p ↥Q → ↑self ≤ Q → Q = ↑self

full_name: Sylow.instCoeOutSubgroup
code: instance : CoeOut (Sylow p G) (Subgroup G) 
goal: CoeOut (Sylow p G) (Subgroup G)

full_name: Sylow.ext
code: @[ext]
theorem ext {P Q : Sylow p G} (h : (P : Subgroup G) = Q) : P = Q 
goal: P = Q

full_name: Sylow.ext_iff
code: theorem ext_iff {P Q : Sylow p G} : P = Q ↔ (P : Subgroup G) = Q 
goal: P = Q ↔ ↑P = ↑Q

full_name: Sylow.instSetLike
code: instance : SetLike (Sylow p G) G 
goal: SetLike (Sylow p G) G

full_name: Sylow.instSubgroupClass
code: instance : SubgroupClass (Sylow p G) G 
goal: SubgroupClass (Sylow p G) G

full_name: Sylow.mulActionLeft
code: /-- The action by a Sylow subgroup is the action by the underlying group. -/
instance mulActionLeft {α : Type*} [MulAction G α] : MulAction P α 
goal: MulAction (↥↑P) α

full_name: Sylow.comapOfKerIsPGroup
code: /-- The preimage of a Sylow subgroup under a p-group-kernel homomorphism is a Sylow subgroup. -/
def comapOfKerIsPGroup (hϕ : IsPGroup p ϕ.ker) (h : ↑P ≤ ϕ.range) : Sylow p K 
goal: Sylow p K

full_name: Sylow.coe_comapOfKerIsPGroup
code: @[simp]
theorem coe_comapOfKerIsPGroup (hϕ : IsPGroup p ϕ.ker) (h : ↑P ≤ ϕ.range) :
    (P.comapOfKerIsPGroup ϕ hϕ h : Subgroup K) = Subgroup.comap ϕ ↑P 
goal: ↑(P.comapOfKerIsPGroup ϕ hϕ h) = Subgroup.comap ϕ ↑P

full_name: Sylow.comapOfInjective
code: /-- The preimage of a Sylow subgroup under an injective homomorphism is a Sylow subgroup. -/
def comapOfInjective (hϕ : Function.Injective ϕ) (h : ↑P ≤ ϕ.range) : Sylow p K 
goal: Sylow p K

full_name: Sylow.coe_comapOfInjective
code: @[simp]
theorem coe_comapOfInjective (hϕ : Function.Injective ϕ) (h : ↑P ≤ ϕ.range) :
    ↑(P.comapOfInjective ϕ hϕ h) = Subgroup.comap ϕ ↑P 
goal: ↑(P.comapOfInjective ϕ hϕ h) = Subgroup.comap ϕ ↑P

full_name: Sylow.subtype
code: /-- A sylow subgroup of G is also a sylow subgroup of a subgroup of G. -/
protected def subtype (h : ↑P ≤ N) : Sylow p N 
goal: Sylow p ↥N

full_name: Sylow.coe_subtype
code: @[simp]
theorem coe_subtype (h : ↑P ≤ N) : ↑(P.subtype h) = subgroupOf (↑P) N 
goal: ↑(P.subtype h) = (↑P).subgroupOf N

full_name: Sylow.subtype_injective
code: theorem subtype_injective {P Q : Sylow p G} {hP : ↑P ≤ N} {hQ : ↑Q ≤ N}
    (h : P.subtype hP = Q.subtype hQ) : P = Q 
goal: P = Q

full_name: IsPGroup.exists_le_sylow
code: /-- A generalization of **Sylow's first theorem**.
  Every `p`-subgroup is contained in a Sylow `p`-subgroup. -/
theorem IsPGroup.exists_le_sylow {P : Subgroup G} (hP : IsPGroup p P) : ∃ Q : Sylow p G, P ≤ Q 
goal: ∃ Q, P ≤ ↑Q

full_name: Sylow.nonempty
code: instance Sylow.nonempty : Nonempty (Sylow p G) 
goal: Nonempty (Sylow p G)

full_name: Sylow.inhabited
code: noncomputable instance Sylow.inhabited : Inhabited (Sylow p G) 
goal: Inhabited (Sylow p G)

full_name: Sylow.exists_comap_eq_of_ker_isPGroup
code: theorem Sylow.exists_comap_eq_of_ker_isPGroup {H : Type*} [Group H] (P : Sylow p H) {f : H →* G}
    (hf : IsPGroup p f.ker) : ∃ Q : Sylow p G, (Q : Subgroup G).comap f = P 
goal: ∃ Q, Subgroup.comap f ↑Q = ↑P

full_name: Sylow.exists_comap_eq_of_injective
code: theorem Sylow.exists_comap_eq_of_injective {H : Type*} [Group H] (P : Sylow p H) {f : H →* G}
    (hf : Function.Injective f) : ∃ Q : Sylow p G, (Q : Subgroup G).comap f = P 
goal: ∃ Q, Subgroup.comap f ↑Q = ↑P

full_name: Sylow.exists_comap_subtype_eq
code: theorem Sylow.exists_comap_subtype_eq {H : Subgroup G} (P : Sylow p H) :
    ∃ Q : Sylow p G, (Q : Subgroup G).comap H.subtype = P 
goal: ∃ Q, Subgroup.comap H.subtype ↑Q = ↑P

full_name: Sylow.finite_of_ker_is_pGroup
code: /-- If the kernel of `f : H →* G` is a `p`-group,
  then `Finite (Sylow p G)` implies `Finite (Sylow p H)`. -/
theorem Sylow.finite_of_ker_is_pGroup {H : Type*} [Group H] {f : H →* G}
    (hf : IsPGroup p f.ker) [Finite (Sylow p G)] : Finite (Sylow p H) 
goal: Finite (Sylow p H)

full_name: Sylow.finite_of_injective
code: /-- If `f : H →* G` is injective, then `Finite (Sylow p G)` implies `Finite (Sylow p H)`. -/
theorem Sylow.finite_of_injective {H : Type*} [Group H] {f : H →* G}
    (hf : Function.Injective f) [Finite (Sylow p G)] : Finite (Sylow p H) 
goal: Finite (Sylow p H)

full_name: instFiniteSylowSubtypeMemSubgroup
code: /-- If `H` is a subgroup of `G`, then `Finite (Sylow p G)` implies `Finite (Sylow p H)`. -/
instance (H : Subgroup G) [Finite (Sylow p G)] : Finite (Sylow p H) 
goal: Finite (Sylow p ↥H)

full_name: Sylow.pointwiseMulAction
code: /-- `Subgroup.pointwiseMulAction` preserves Sylow subgroups. -/
instance Sylow.pointwiseMulAction {α : Type*} [Group α] [MulDistribMulAction α G] :
    MulAction α (Sylow p G) 
goal: MulAction α (Sylow p G)

full_name: Sylow.pointwise_smul_def
code: theorem Sylow.pointwise_smul_def {α : Type*} [Group α] [MulDistribMulAction α G] {g : α}
    {P : Sylow p G} : ↑(g • P) = g • (P : Subgroup G) 
goal: ↑(g • P) = g • ↑P

full_name: Sylow.mulAction
code: instance Sylow.mulAction : MulAction G (Sylow p G) 
goal: MulAction G (Sylow p G)

full_name: Sylow.smul_def
code: theorem Sylow.smul_def {g : G} {P : Sylow p G} : g • P = MulAut.conj g • P 
goal: g • P = MulAut.conj g • P

full_name: Sylow.coe_subgroup_smul
code: theorem Sylow.coe_subgroup_smul {g : G} {P : Sylow p G} :
    ↑(g • P) = MulAut.conj g • (P : Subgroup G) 
goal: ↑(g • P) = MulAut.conj g • ↑P

full_name: Sylow.coe_smul
code: theorem Sylow.coe_smul {g : G} {P : Sylow p G} : ↑(g • P) = MulAut.conj g • (P : Set G) 
goal: ↑(g • P) = MulAut.conj g • ↑P

full_name: Sylow.smul_le
code: theorem Sylow.smul_le {P : Sylow p G} {H : Subgroup G} (hP : ↑P ≤ H) (h : H) : ↑(h • P) ≤ H 
goal: ↑(h • P) ≤ H

full_name: Sylow.smul_subtype
code: theorem Sylow.smul_subtype {P : Sylow p G} {H : Subgroup G} (hP : ↑P ≤ H) (h : H) :
    h • P.subtype hP = (h • P).subtype (Sylow.smul_le hP h) 
goal: h • P.subtype hP = (h • P).subtype ⋯

full_name: Sylow.smul_eq_iff_mem_normalizer
code: theorem Sylow.smul_eq_iff_mem_normalizer {g : G} {P : Sylow p G} :
    g • P = P ↔ g ∈ (P : Subgroup G).normalizer 
goal: g • P = P ↔ g ∈ (↑P).normalizer

full_name: Sylow.smul_eq_of_normal
code: theorem Sylow.smul_eq_of_normal {g : G} {P : Sylow p G} [h : (P : Subgroup G).Normal] :
    g • P = P 
goal: g • P = P

full_name: Subgroup.sylow_mem_fixedPoints_iff
code: theorem Subgroup.sylow_mem_fixedPoints_iff (H : Subgroup G) {P : Sylow p G} :
    P ∈ fixedPoints H (Sylow p G) ↔ H ≤ (P : Subgroup G).normalizer 
goal: P ∈ MulAction.fixedPoints (↥H) (Sylow p G) ↔ H ≤ (↑P).normalizer

full_name: IsPGroup.inf_normalizer_sylow
code: theorem IsPGroup.inf_normalizer_sylow {P : Subgroup G} (hP : IsPGroup p P) (Q : Sylow p G) :
    P ⊓ (Q : Subgroup G).normalizer = P ⊓ Q 
goal: P ⊓ (↑Q).normalizer = P ⊓ ↑Q

full_name: IsPGroup.sylow_mem_fixedPoints_iff
code: theorem IsPGroup.sylow_mem_fixedPoints_iff {P : Subgroup G} (hP : IsPGroup p P) {Q : Sylow p G} :
    Q ∈ fixedPoints P (Sylow p G) ↔ P ≤ Q 
goal: Q ∈ MulAction.fixedPoints (↥P) (Sylow p G) ↔ P ≤ ↑Q

full_name: instIsPretransitiveSylowOfFactPrimeOfFinite
code: /-- A generalization of **Sylow's second theorem**.
  If the number of Sylow `p`-subgroups is finite, then all Sylow `p`-subgroups are conjugate. -/
instance [hp : Fact p.Prime] [Finite (Sylow p G)] : IsPretransitive G (Sylow p G) 
goal: MulAction.IsPretransitive G (Sylow p G)

full_name: card_sylow_modEq_one
code: /-- A generalization of **Sylow's third theorem**.
  If the number of Sylow `p`-subgroups is finite, then it is congruent to `1` modulo `p`. -/
theorem card_sylow_modEq_one [Fact p.Prime] [Finite (Sylow p G)] :
    Nat.card (Sylow p G) ≡ 1 [MOD p] 
goal: Nat.card (Sylow p G) ≡ 1 [MOD p]

full_name: not_dvd_card_sylow
code: theorem not_dvd_card_sylow [hp : Fact p.Prime] [Finite (Sylow p G)] : ¬p ∣ Nat.card (Sylow p G) 
goal: ¬p ∣ Nat.card (Sylow p G)

full_name: Sylow.equivSMul
code: /-- Sylow subgroups are isomorphic -/
nonrec def Sylow.equivSMul (P : Sylow p G) (g : G) : P ≃* (g • P : Sylow p G) 
goal: ↥↑P ≃* ↥↑(g • P)

full_name: Sylow.equiv
code: /-- Sylow subgroups are isomorphic -/
noncomputable def Sylow.equiv [Fact p.Prime] [Finite (Sylow p G)] (P Q : Sylow p G) : P ≃* Q 
goal: ↥↑P ≃* ↥↑Q

full_name: Sylow.orbit_eq_top
code: @[simp]
theorem Sylow.orbit_eq_top [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G) : orbit G P = ⊤ 
goal: MulAction.orbit G P = ⊤

full_name: Sylow.stabilizer_eq_normalizer
code: theorem Sylow.stabilizer_eq_normalizer (P : Sylow p G) :
    stabilizer G P = (P : Subgroup G).normalizer 
goal: MulAction.stabilizer G P = (↑P).normalizer

full_name: Sylow.conj_eq_normalizer_conj_of_mem_centralizer
code: theorem Sylow.conj_eq_normalizer_conj_of_mem_centralizer [Fact p.Prime] [Finite (Sylow p G)]
    (P : Sylow p G) (x g : G) (hx : x ∈ centralizer (P : Set G))
    (hy : g⁻¹ * x * g ∈ centralizer (P : Set G)) :
    ∃ n ∈ (P : Subgroup G).normalizer, g⁻¹ * x * g = n⁻¹ * x * n 
goal: ∃ n ∈ (↑P).normalizer, g⁻¹ * x * g = n⁻¹ * x * n

full_name: Sylow.conj_eq_normalizer_conj_of_mem
code: theorem Sylow.conj_eq_normalizer_conj_of_mem [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G)
    [_hP : (P : Subgroup G).IsCommutative] (x g : G) (hx : x ∈ P) (hy : g⁻¹ * x * g ∈ P) :
    ∃ n ∈ (P : Subgroup G).normalizer, g⁻¹ * x * g = n⁻¹ * x * n 
goal: ∃ n ∈ (↑P).normalizer, g⁻¹ * x * g = n⁻¹ * x * n

full_name: Sylow.equivQuotientNormalizer
code: /-- Sylow `p`-subgroups are in bijection with cosets of the normalizer of a Sylow `p`-subgroup -/
noncomputable def Sylow.equivQuotientNormalizer [Fact p.Prime] [Finite (Sylow p G)]
    (P : Sylow p G) : Sylow p G ≃ G ⧸ (P : Subgroup G).normalizer 
goal: Sylow p G ≃ G ⧸ (↑P).normalizer

full_name: instFiniteQuotientSubgroupNormalizerOfFactPrimeOfSylow
code: instance [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G) :
    Finite (G ⧸ (P : Subgroup G).normalizer) 
goal: Finite (G ⧸ (↑P).normalizer)

full_name: card_sylow_eq_card_quotient_normalizer
code: theorem card_sylow_eq_card_quotient_normalizer [Fact p.Prime] [Finite (Sylow p G)]
    (P : Sylow p G) : Nat.card (Sylow p G) = Nat.card (G ⧸ (P : Subgroup G).normalizer) 
goal: Nat.card (Sylow p G) = Nat.card (G ⧸ (↑P).normalizer)

full_name: card_sylow_eq_index_normalizer
code: theorem card_sylow_eq_index_normalizer [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G) :
    Nat.card (Sylow p G) = (P : Subgroup G).normalizer.index 
goal: Nat.card (Sylow p G) = (↑P).normalizer.index

full_name: card_sylow_dvd_index
code: theorem card_sylow_dvd_index [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G) :
    Nat.card (Sylow p G) ∣ (P : Subgroup G).index 
goal: Nat.card (Sylow p G) ∣ (↑P).index

full_name: not_dvd_index_sylow'
code: theorem not_dvd_index_sylow' [hp : Fact p.Prime] (P : Sylow p G) [(P : Subgroup G).Normal]
    [fP : FiniteIndex (P : Subgroup G)] : ¬p ∣ (P : Subgroup G).index 
goal: ¬p ∣ (↑P).index

full_name: not_dvd_index_sylow
code: theorem not_dvd_index_sylow [hp : Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G)
    (hP : relindex ↑P (P : Subgroup G).normalizer ≠ 0) : ¬p ∣ (P : Subgroup G).index 
goal: ¬p ∣ (↑P).index

full_name: Sylow.normalizer_sup_eq_top
code: /-- **Frattini's Argument**: If `N` is a normal subgroup of `G`, and if `P` is a Sylow `p`-subgroup
  of `N`, then `N_G(P) ⊔ N = G`. -/
theorem Sylow.normalizer_sup_eq_top {p : ℕ} [Fact p.Prime] {N : Subgroup G} [N.Normal]
    [Finite (Sylow p N)] (P : Sylow p N) :
    ((↑P : Subgroup N).map N.subtype).normalizer ⊔ N = ⊤ 
goal: (Subgroup.map N.subtype ↑P).normalizer ⊔ N = ⊤

full_name: Sylow.normalizer_sup_eq_top'
code: /-- **Frattini's Argument**: If `N` is a normal subgroup of `G`, and if `P` is a Sylow `p`-subgroup
  of `N`, then `N_G(P) ⊔ N = G`. -/
theorem Sylow.normalizer_sup_eq_top' {p : ℕ} [Fact p.Prime] {N : Subgroup G} [N.Normal]
    [Finite (Sylow p N)] (P : Sylow p G) (hP : ↑P ≤ N) : (P : Subgroup G).normalizer ⊔ N = ⊤ 
goal: (↑P).normalizer ⊔ N = ⊤

full_name: QuotientGroup.card_preimage_mk
code: theorem QuotientGroup.card_preimage_mk (s : Subgroup G) (t : Set (G ⧸ s)) :
    Nat.card (QuotientGroup.mk ⁻¹' t) = Nat.card s * Nat.card t 
goal: Nat.card ↑(QuotientGroup.mk ⁻¹' t) = Nat.card ↥s * Nat.card ↑t

full_name: Sylow.mem_fixedPoints_mul_left_cosets_iff_mem_normalizer
code: theorem mem_fixedPoints_mul_left_cosets_iff_mem_normalizer {H : Subgroup G} [Finite (H : Set G)]
    {x : G} : (x : G ⧸ H) ∈ MulAction.fixedPoints H (G ⧸ H) ↔ x ∈ normalizer H 
goal: ↑x ∈ MulAction.fixedPoints (↥H) (G ⧸ H) ↔ x ∈ H.normalizer

full_name: Sylow.fixedPointsMulLeftCosetsEquivQuotient
code: /-- The fixed points of the action of `H` on its cosets correspond to `normalizer H / H`. -/
def fixedPointsMulLeftCosetsEquivQuotient (H : Subgroup G) [Finite (H : Set G)] :
    MulAction.fixedPoints H (G ⧸ H) ≃
      normalizer H ⧸ Subgroup.comap ((normalizer H).subtype : normalizer H →* G) H 
goal: ↑(MulAction.fixedPoints (↥H) (G ⧸ H)) ≃ ↥H.normalizer ⧸ Subgroup.comap H.normalizer.subtype H

full_name: Sylow.card_quotient_normalizer_modEq_card_quotient
code: /-- If `H` is a `p`-subgroup of `G`, then the index of `H` inside its normalizer is congruent
  mod `p` to the index of `H`.  -/
theorem card_quotient_normalizer_modEq_card_quotient [Finite G] {p : ℕ} {n : ℕ} [hp : Fact p.Prime]
    {H : Subgroup G} (hH : Nat.card H = p ^ n) :
    Nat.card (normalizer H ⧸ Subgroup.comap ((normalizer H).subtype : normalizer H →* G) H) ≡
      Nat.card (G ⧸ H) [MOD p] 
goal: Nat.card (↥H.normalizer ⧸ Subgroup.comap H.normalizer.subtype H) ≡ Nat.card (G ⧸ H) [MOD p]

full_name: Sylow.card_normalizer_modEq_card
code: /-- If `H` is a subgroup of `G` of cardinality `p ^ n`, then the cardinality of the
  normalizer of `H` is congruent mod `p ^ (n + 1)` to the cardinality of `G`.  -/
theorem card_normalizer_modEq_card [Finite G] {p : ℕ} {n : ℕ} [hp : Fact p.Prime] {H : Subgroup G}
    (hH : Nat.card H = p ^ n) : Nat.card (normalizer H) ≡ Nat.card G [MOD p ^ (n + 1)] 
goal: Nat.card ↥H.normalizer ≡ Nat.card G [MOD p ^ (n + 1)]

full_name: Sylow.prime_dvd_card_quotient_normalizer
code: /-- If `H` is a `p`-subgroup but not a Sylow `p`-subgroup, then `p` divides the
  index of `H` inside its normalizer. -/
theorem prime_dvd_card_quotient_normalizer [Finite G] {p : ℕ} {n : ℕ} [hp : Fact p.Prime]
    (hdvd : p ^ (n + 1) ∣ Nat.card G) {H : Subgroup G} (hH : Nat.card H = p ^ n) :
    p ∣ Nat.card (normalizer H ⧸ Subgroup.comap ((normalizer H).subtype : normalizer H →* G) H) 
goal: p ∣ Nat.card (↥H.normalizer ⧸ Subgroup.comap H.normalizer.subtype H)

full_name: Sylow.prime_pow_dvd_card_normalizer
code: /-- If `H` is a `p`-subgroup but not a Sylow `p`-subgroup of cardinality `p ^ n`,
  then `p ^ (n + 1)` divides the cardinality of the normalizer of `H`. -/
theorem prime_pow_dvd_card_normalizer [Finite G] {p : ℕ} {n : ℕ} [_hp : Fact p.Prime]
    (hdvd : p ^ (n + 1) ∣ Nat.card G) {H : Subgroup G} (hH : Nat.card H = p ^ n) :
    p ^ (n + 1) ∣ Nat.card (normalizer H) 
goal: p ^ (n + 1) ∣ Nat.card ↥H.normalizer

full_name: Sylow.exists_subgroup_card_pow_succ
code: /-- If `H` is a subgroup of `G` of cardinality `p ^ n`,
  then `H` is contained in a subgroup of cardinality `p ^ (n + 1)`
  if `p ^ (n + 1)` divides the cardinality of `G` -/
theorem exists_subgroup_card_pow_succ [Finite G] {p : ℕ} {n : ℕ} [hp : Fact p.Prime]
    (hdvd : p ^ (n + 1) ∣ Nat.card G) {H : Subgroup G} (hH : Nat.card H = p ^ n) :
    ∃ K : Subgroup G, Nat.card K = p ^ (n + 1) ∧ H ≤ K 
goal: ∃ K, Nat.card ↥K = p ^ (n + 1) ∧ H ≤ K

full_name: Sylow.exists_subgroup_card_pow_prime_le
code: /-- If `H` is a subgroup of `G` of cardinality `p ^ n`,
  then `H` is contained in a subgroup of cardinality `p ^ m`
  if `n ≤ m` and `p ^ m` divides the cardinality of `G` -/
theorem exists_subgroup_card_pow_prime_le [Finite G] (p : ℕ) :
    ∀ {n m : ℕ} [_hp : Fact p.Prime] (_hdvd : p ^ m ∣ Nat.card G) (H : Subgroup G)
      (_hH : Nat.card H = p ^ n) (_hnm : n ≤ m), ∃ K : Subgroup G, Nat.card K = p ^ m ∧ H ≤ K
  
goal: ∃ K, Nat.card ↥K = p ^ m ∧ H ≤ K

full_name: Sylow.exists_subgroup_card_pow_prime
code: /-- A generalisation of **Sylow's first theorem**. If `p ^ n` divides
  the cardinality of `G`, then there is a subgroup of cardinality `p ^ n` -/
theorem exists_subgroup_card_pow_prime [Finite G] (p : ℕ) {n : ℕ} [Fact p.Prime]
    (hdvd : p ^ n ∣ Nat.card G) : ∃ K : Subgroup G, Nat.card K = p ^ n 
goal: ∃ K, Nat.card ↥K = p ^ n

full_name: Sylow.exists_subgroup_card_pow_prime_of_le_card
code: /-- A special case of **Sylow's first theorem**. If `G` is a `p`-group of size at least `p ^ n`
then there is a subgroup of cardinality `p ^ n`. -/
lemma exists_subgroup_card_pow_prime_of_le_card {n p : ℕ} (hp : p.Prime) (h : IsPGroup p G)
    (hn : p ^ n ≤ Nat.card G) : ∃ H : Subgroup G, Nat.card H = p ^ n 
goal: ∃ H, Nat.card ↥H = p ^ n

full_name: Sylow.exists_subgroup_le_card_pow_prime_of_le_card
code: /-- A special case of **Sylow's first theorem**. If `G` is a `p`-group and `H` a subgroup of size at
least `p ^ n` then there is a subgroup of `H` of cardinality `p ^ n`. -/
lemma exists_subgroup_le_card_pow_prime_of_le_card {n p : ℕ} (hp : p.Prime) (h : IsPGroup p G)
    {H : Subgroup G} (hn : p ^ n ≤ Nat.card H) : ∃ H' ≤ H, Nat.card H' = p ^ n 
goal: ∃ H' ≤ H, Nat.card ↥H' = p ^ n

full_name: Sylow.exists_subgroup_le_card_le
code: /-- A special case of **Sylow's first theorem**. If `G` is a `p`-group and `H` a subgroup of size at
least `k` then there is a subgroup of `H` of cardinality between `k / p` and `k`. -/
lemma exists_subgroup_le_card_le {k p : ℕ} (hp : p.Prime) (h : IsPGroup p G) {H : Subgroup G}
    (hk : k ≤ Nat.card H) (hk₀ : k ≠ 0) : ∃ H' ≤ H, Nat.card H' ≤ k ∧ k < p * Nat.card H' 
goal: ∃ H' ≤ H, Nat.card ↥H' ≤ k ∧ k < p * Nat.card ↥H'

full_name: Sylow.pow_dvd_card_of_pow_dvd_card
code: theorem pow_dvd_card_of_pow_dvd_card [Finite G] {p n : ℕ} [hp : Fact p.Prime] (P : Sylow p G)
    (hdvd : p ^ n ∣ Nat.card G) : p ^ n ∣ Nat.card P 
goal: p ^ n ∣ Nat.card ↥↑P

full_name: Sylow.dvd_card_of_dvd_card
code: theorem dvd_card_of_dvd_card [Finite G] {p : ℕ} [Fact p.Prime] (P : Sylow p G)
    (hdvd : p ∣ Nat.card G) : p ∣ Nat.card P 
goal: p ∣ Nat.card ↥↑P

full_name: Sylow.card_coprime_index
code: /-- Sylow subgroups are Hall subgroups. -/
theorem card_coprime_index [Finite G] {p : ℕ} [hp : Fact p.Prime] (P : Sylow p G) :
    (Nat.card P).Coprime (index (P : Subgroup G)) 
goal: (Nat.card ↥↑P).Coprime (↑P).index

full_name: Sylow.ne_bot_of_dvd_card
code: theorem ne_bot_of_dvd_card [Finite G] {p : ℕ} [hp : Fact p.Prime] (P : Sylow p G)
    (hdvd : p ∣ Nat.card G) : (P : Subgroup G) ≠ ⊥ 
goal: ↑P ≠ ⊥

full_name: Sylow.card_eq_multiplicity
code: /-- The cardinality of a Sylow subgroup is `p ^ n`
 where `n` is the multiplicity of `p` in the group order. -/
theorem card_eq_multiplicity [Finite G] {p : ℕ} [hp : Fact p.Prime] (P : Sylow p G) :
    Nat.card P = p ^ Nat.factorization (Nat.card G) p 
goal: Nat.card ↥↑P = p ^ (Nat.card G).factorization p

full_name: Sylow.ofCard
code: /-- A subgroup with cardinality `p ^ n` is a Sylow subgroup
 where `n` is the multiplicity of `p` in the group order. -/
def ofCard [Finite G] {p : ℕ} [Fact p.Prime] (H : Subgroup G)
    (card_eq : Nat.card H = p ^ (Nat.card G).factorization p) : Sylow p G 
goal: Sylow p G

full_name: Sylow.coe_ofCard
code: @[simp, norm_cast]
theorem coe_ofCard [Finite G] {p : ℕ} [Fact p.Prime] (H : Subgroup G)
    (card_eq : Nat.card H = p ^ (Nat.card G).factorization p) : ↑(ofCard H card_eq) = H 
goal: ↑(Sylow.ofCard H card_eq) = H

full_name: Sylow.unique_of_normal
code: /-- If `G` has a normal Sylow `p`-subgroup, then it is the only Sylow `p`-subgroup. -/
noncomputable def unique_of_normal {p : ℕ} [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G)
    (h : (P : Subgroup G).Normal) : Unique (Sylow p G) 
goal: Unique (Sylow p G)

full_name: Sylow.characteristic_of_normal
code: theorem characteristic_of_normal {p : ℕ} [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G)
    (h : (P : Subgroup G).Normal) : (P : Subgroup G).Characteristic 
goal: (↑P).Characteristic

full_name: Sylow.normal_of_normalizer_normal
code: theorem normal_of_normalizer_normal {p : ℕ} [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G)
    (hn : (↑P : Subgroup G).normalizer.Normal) : (↑P : Subgroup G).Normal 
goal: (↑P).Normal

full_name: Sylow.normalizer_normalizer
code: @[simp]
theorem normalizer_normalizer {p : ℕ} [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G) :
    (↑P : Subgroup G).normalizer.normalizer = (↑P : Subgroup G).normalizer 
goal: (↑P).normalizer.normalizer = (↑P).normalizer

full_name: Sylow.normal_of_all_max_subgroups_normal
code: theorem normal_of_all_max_subgroups_normal [Finite G]
    (hnc : ∀ H : Subgroup G, IsCoatom H → H.Normal) {p : ℕ} [Fact p.Prime] [Finite (Sylow p G)]
    (P : Sylow p G) : (↑P : Subgroup G).Normal 
goal: (↑P).Normal

full_name: Sylow.normal_of_normalizerCondition
code: theorem normal_of_normalizerCondition (hnc : NormalizerCondition G) {p : ℕ} [Fact p.Prime]
    [Finite (Sylow p G)] (P : Sylow p G) : (↑P : Subgroup G).Normal 
goal: (↑P).Normal

full_name: Sylow.directProductOfNormal
code: /-- If all its Sylow subgroups are normal, then a finite group is isomorphic to the direct product
of these Sylow subgroups.
-/
noncomputable def directProductOfNormal [Finite G]
    (hn : ∀ {p : ℕ} [Fact p.Prime] (P : Sylow p G), (↑P : Subgroup G).Normal) :
    (∀ p : (Nat.card G).primeFactors, ∀ P : Sylow p G, (↑P : Subgroup G)) ≃* G 
goal: ((p : { x // x ∈ (Nat.card G).primeFactors }) → (P : Sylow (↑p) G) → ↥↑P) ≃* G