File: Mathlib/GroupTheory/Transfer.lean

full_name: AddSubgroup.leftTransversals.diff
code: /-- The difference of two left transversals -/
@[to_additive "The difference of two left transversals"]
noncomputable def diff : A 
goal: A

full_name: Subgroup.leftTransversals.diff
code: /-- The difference of two left transversals -/
@[to_additive "The difference of two left transversals"]
noncomputable def diff : A 
goal: A

full_name: Subgroup.leftTransversals.diff_mul_diff
code: @[to_additive]
theorem diff_mul_diff : diff ϕ R S * diff ϕ S T = diff ϕ R T 
goal: Subgroup.leftTransversals.diff ϕ R S * Subgroup.leftTransversals.diff ϕ S T = Subgroup.leftTransversals.diff ϕ R T

full_name: AddSubgroup.leftTransversals.diff_add_diff
code: @[to_additive]
theorem diff_mul_diff : diff ϕ R S * diff ϕ S T = diff ϕ R T 
goal: AddSubgroup.leftTransversals.diff ϕ R S + AddSubgroup.leftTransversals.diff ϕ S T =
  AddSubgroup.leftTransversals.diff ϕ R T

full_name: AddSubgroup.leftTransversals.diff_self
code: @[to_additive]
theorem diff_self : diff ϕ T T = 1 
goal: AddSubgroup.leftTransversals.diff ϕ T T = 0

full_name: Subgroup.leftTransversals.diff_self
code: @[to_additive]
theorem diff_self : diff ϕ T T = 1 
goal: Subgroup.leftTransversals.diff ϕ T T = 1

full_name: Subgroup.leftTransversals.diff_inv
code: @[to_additive]
theorem diff_inv : (diff ϕ S T)⁻¹ = diff ϕ T S 
goal: (Subgroup.leftTransversals.diff ϕ S T)⁻¹ = Subgroup.leftTransversals.diff ϕ T S

full_name: AddSubgroup.leftTransversals.diff_neg
code: @[to_additive]
theorem diff_inv : (diff ϕ S T)⁻¹ = diff ϕ T S 
goal: -AddSubgroup.leftTransversals.diff ϕ S T = AddSubgroup.leftTransversals.diff ϕ T S

full_name: Subgroup.leftTransversals.smul_diff_smul
code: @[to_additive]
theorem smul_diff_smul (g : G) : diff ϕ (g • S) (g • T) = diff ϕ S T 
goal: Subgroup.leftTransversals.diff ϕ (g • S) (g • T) = Subgroup.leftTransversals.diff ϕ S T

full_name: AddSubgroup.leftTransversals.vadd_diff_vadd
code: @[to_additive]
theorem smul_diff_smul (g : G) : diff ϕ (g • S) (g • T) = diff ϕ S T 
goal: AddSubgroup.leftTransversals.diff ϕ (g +ᵥ S) (g +ᵥ T) = AddSubgroup.leftTransversals.diff ϕ S T

full_name: MonoidHom.transfer
code: /-- Given `ϕ : H →* A` from `H : Subgroup G` to a commutative group `A`,
the transfer homomorphism is `transfer ϕ : G →* A`. -/
@[to_additive "Given `ϕ : H →+ A` from `H : AddSubgroup G` to an additive commutative group `A`,
the transfer homomorphism is `transfer ϕ : G →+ A`."]
noncomputable def transfer [FiniteIndex H] : G →* A 
goal: G →* A

full_name: AddMonoidHom.transfer
code: /-- Given `ϕ : H →* A` from `H : Subgroup G` to a commutative group `A`,
the transfer homomorphism is `transfer ϕ : G →* A`. -/
@[to_additive "Given `ϕ : H →+ A` from `H : AddSubgroup G` to an additive commutative group `A`,
the transfer homomorphism is `transfer ϕ : G →+ A`."]
noncomputable def transfer [FiniteIndex H] : G →* A 
goal: G →+ A

full_name: AddMonoidHom.transfer_def
code: @[to_additive]
theorem transfer_def [FiniteIndex H] (g : G) : transfer ϕ g = diff ϕ T (g • T) 
goal: ϕ.transfer g = AddSubgroup.leftTransversals.diff ϕ T (g +ᵥ T)

full_name: MonoidHom.transfer_def
code: @[to_additive]
theorem transfer_def [FiniteIndex H] (g : G) : transfer ϕ g = diff ϕ T (g • T) 
goal: ϕ.transfer g = Subgroup.leftTransversals.diff ϕ T (g • T)

full_name: MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot
code: /-- Explicit computation of the transfer homomorphism. -/
theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
    [Fintype (Quotient (orbitRel (zpowers g) (G ⧸ H)))] :
    transfer ϕ g =
      ∏ q : Quotient (orbitRel (zpowers g) (G ⧸ H)),
        ϕ
          ⟨q.out'.out'⁻¹ * g ^ Function.minimalPeriod (g • ·) q.out' * q.out'.out',
            QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q.out'⟩ 
goal: ϕ.transfer g =
  ∏ q : Quotient (MulAction.orbitRel (↥(Subgroup.zpowers g)) (G ⧸ H)),
    ϕ ⟨(Quotient.out' q.out')⁻¹ * g ^ Function.minimalPeriod (fun x => g • x) q.out' * Quotient.out' q.out', ⋯⟩

full_name: MonoidHom.transfer_eq_pow_aux
code: /-- Auxiliary lemma in order to state `transfer_eq_pow`. -/
theorem transfer_eq_pow_aux (g : G)
    (key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k) :
    g ^ H.index ∈ H 
goal: g ^ H.index ∈ H

full_name: MonoidHom.transfer_eq_pow
code: theorem transfer_eq_pow [FiniteIndex H] (g : G)
    (key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k) :
    transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ 
goal: ϕ.transfer g = ϕ ⟨g ^ H.index, ⋯⟩

full_name: MonoidHom.transfer_center_eq_pow
code: theorem transfer_center_eq_pow [FiniteIndex (center G)] (g : G) :
    transfer (MonoidHom.id (center G)) g = ⟨g ^ (center G).index, (center G).pow_index_mem g⟩ 
goal: (MonoidHom.id ↥(Subgroup.center G)).transfer g = ⟨g ^ (Subgroup.center G).index, ⋯⟩

full_name: MonoidHom.transferCenterPow
code: /-- The transfer homomorphism `G →* center G`. -/
noncomputable def transferCenterPow [FiniteIndex (center G)] : G →* center G 
goal: G →* ↥(Subgroup.center G)

full_name: MonoidHom.transferCenterPow_apply
code: @[simp]
theorem transferCenterPow_apply [FiniteIndex (center G)] (g : G) :
    ↑(transferCenterPow G g) = g ^ (center G).index 
goal: ↑((MonoidHom.transferCenterPow G) g) = g ^ (Subgroup.center G).index

full_name: MonoidHom.transferSylow
code: /-- The homomorphism `G →* P` in Burnside's transfer theorem. -/
noncomputable def transferSylow [FiniteIndex (P : Subgroup G)] : G →* (P : Subgroup G) 
goal: G →* ↥↑P

full_name: MonoidHom.transferSylow_eq_pow_aux
code: /-- Auxiliary lemma in order to state `transferSylow_eq_pow`. -/
theorem transferSylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G)
    (h : g₀⁻¹ * g ^ k * g₀ ∈ P) : g₀⁻¹ * g ^ k * g₀ = g ^ k 
goal: g₀⁻¹ * g ^ k * g₀ = g ^ k

full_name: MonoidHom.transferSylow_eq_pow
code: theorem transferSylow_eq_pow (g : G) (hg : g ∈ P) :
    transferSylow P hP g =
      ⟨g ^ (P : Subgroup G).index, transfer_eq_pow_aux g (transferSylow_eq_pow_aux P hP g hg)⟩ 
goal: (MonoidHom.transferSylow P hP) g = ⟨g ^ (↑P).index, ⋯⟩

full_name: MonoidHom.transferSylow_restrict_eq_pow
code: theorem transferSylow_restrict_eq_pow : ⇑((transferSylow P hP).restrict (P : Subgroup G)) =
    (fun x : P => x ^ (P : Subgroup G).index) 
goal: ⇑((MonoidHom.transferSylow P hP).restrict ↑P) = fun x => x ^ (↑P).index

full_name: MonoidHom.ker_transferSylow_isComplement'
code: /-- **Burnside's normal p-complement theorem**: If `N(P) ≤ C(P)`, then `P` has a normal
complement. -/
theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker P 
goal: (MonoidHom.transferSylow P hP).ker.IsComplement' ↑P

full_name: MonoidHom.not_dvd_card_ker_transferSylow
code: theorem not_dvd_card_ker_transferSylow : ¬p ∣ Nat.card (transferSylow P hP).ker 
goal: ¬p ∣ Nat.card ↥(MonoidHom.transferSylow P hP).ker

full_name: MonoidHom.ker_transferSylow_disjoint
code: theorem ker_transferSylow_disjoint (Q : Subgroup G) (hQ : IsPGroup p Q) :
    Disjoint (transferSylow P hP).ker Q 
goal: Disjoint (MonoidHom.transferSylow P hP).ker Q