Theorem: MonoidHom.transfer_eq_pow_aux
File: Mathlib/GroupTheory/Transfer.lean

tactic: by_cases hH : H.index = 0
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k
⊢ g ^ H.index ∈ H
state_after: case pos
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k
hH : H.index = 0
⊢ g ^ H.index ∈ H

case neg
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k
hH : ¬H.index = 0
⊢ g ^ H.index ∈ H

tactic: letI := fintypeOfIndexNeZero hH
state_before: case neg
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k
hH : ¬H.index = 0
⊢ g ^ H.index ∈ H
state_after: case neg
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k
hH : ¬H.index = 0
this : Fintype (G ⧸ H) := fintypeOfIndexNeZero hH
⊢ g ^ H.index ∈ H

tactic: rw [hH, pow_zero]
state_before: case pos
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k
hH : H.index = 0
⊢ g ^ H.index ∈ H
state_after: case pos
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k
hH : H.index = 0
⊢ 1 ∈ H

tactic: exact H.one_mem
state_before: case pos
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k
hH : H.index = 0
⊢ 1 ∈ H
state_after: no goals

tactic: have hf : ∀ q, f q ∈ H.subgroupOf (zpowers g) := fun q => key q.out'
state_before: case neg
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
hH : ¬H.index = 0
this : Fintype (G ⧸ H) := fintypeOfIndexNeZero hH
key : ∀ (q : G ⧸ H), g ^ Function.minimalPeriod (fun x => g • x) q ∈ H
f : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H)) → ↥(zpowers g) :=
  fun q => ⟨g, ⋯⟩ ^ Function.minimalPeriod (fun x => g • x) q.out'
⊢ g ^ H.index ∈ H
state_after: case neg
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
hH : ¬H.index = 0
this : Fintype (G ⧸ H) := fintypeOfIndexNeZero hH
key : ∀ (q : G ⧸ H), g ^ Function.minimalPeriod (fun x => g • x) q ∈ H
f : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H)) → ↥(zpowers g) :=
  fun q => ⟨g, ⋯⟩ ^ Function.minimalPeriod (fun x => g • x) q.out'
hf : ∀ (q : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H))), f q ∈ H.subgroupOf (zpowers g)
⊢ g ^ H.index ∈ H

tactic: replace key :=
  Subgroup.prod_mem (H.subgroupOf (zpowers g)) fun q (_ : q ∈ Finset.univ) => hf q
state_before: case neg
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
hH : ¬H.index = 0
this : Fintype (G ⧸ H) := fintypeOfIndexNeZero hH
key : ∀ (q : G ⧸ H), g ^ Function.minimalPeriod (fun x => g • x) q ∈ H
f : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H)) → ↥(zpowers g) :=
  fun q => ⟨g, ⋯⟩ ^ Function.minimalPeriod (fun x => g • x) q.out'
hf : ∀ (q : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H))), f q ∈ H.subgroupOf (zpowers g)
⊢ g ^ H.index ∈ H
state_after: case neg
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
hH : ¬H.index = 0
this : Fintype (G ⧸ H) := fintypeOfIndexNeZero hH
f : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H)) → ↥(zpowers g) :=
  fun q => ⟨g, ⋯⟩ ^ Function.minimalPeriod (fun x => g • x) q.out'
hf : ∀ (q : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H))), f q ∈ H.subgroupOf (zpowers g)
key : ∏ c : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H)), f c ∈ H.subgroupOf (zpowers g)
⊢ g ^ H.index ∈ H

tactic: simpa only [f, minimalPeriod_eq_card, Finset.prod_pow_eq_pow_sum, Fintype.card_sigma,
  Fintype.card_congr (selfEquivSigmaOrbits (zpowers g) (G ⧸ H)), index_eq_card] using key
state_before: case neg
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
A : Type u_2
inst✝ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
g : G
hH : ¬H.index = 0
this : Fintype (G ⧸ H) := fintypeOfIndexNeZero hH
f : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H)) → ↥(zpowers g) :=
  fun q => ⟨g, ⋯⟩ ^ Function.minimalPeriod (fun x => g • x) q.out'
hf : ∀ (q : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H))), f q ∈ H.subgroupOf (zpowers g)
key : ∏ c : Quotient (orbitRel (↥(zpowers g)) (G ⧸ H)), f c ∈ H.subgroupOf (zpowers g)
⊢ g ^ H.index ∈ H
state_after: no goals