-- Mathlib/GroupTheory/Perm/Cycle/Basic.lean
theorem IsCycle.isConj (hσ : IsCycle σ) (hτ : IsCycle τ) (h : #σ.support = #τ.support) :
    IsConj σ τ

Proof state:
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
⊢ IsConj σ τ

Tactic:
refine
  isConj_of_support_equiv
    (hσ.zpowersEquivSupport.symm.trans <|
      (zpowersEquivZPowers <| by rw [hσ.orderOf, h, hτ.orderOf]).trans hτ.zpowersEquivSupport)
    ?_

Result:
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
⊢ ∀ (x : α) (hx : x ∈ ↑σ.support),
    ↑((hσ.zpowersEquivSupport.symm.trans ((zpowersEquivZPowers ⋯).trans hτ.zpowersEquivSupport)) ⟨σ x, ⋯⟩) =
      τ ↑((hσ.zpowersEquivSupport.symm.trans ((zpowersEquivZPowers ⋯).trans hτ.zpowersEquivSupport)) ⟨x, hx⟩)

Proof state:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport
        ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨σ ((σ ^ n) (Classical.choose hσ)), ⋯⟩))) =
    τ
      ↑(hτ.zpowersEquivSupport
          ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨(σ ^ n) (Classical.choose hσ), hx⟩)))

Tactic:
erw [hσ.zpowersEquivSupport_symm_apply n]

Result:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport
        ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨σ ((σ ^ n) (Classical.choose hσ)), ⋯⟩))) =
    τ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) ⟨σ ^ n, ⋯⟩))

Proof state:
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
x : α
hx : x ∈ ↑σ.support
⊢ ↑((hσ.zpowersEquivSupport.symm.trans ((zpowersEquivZPowers ⋯).trans hτ.zpowersEquivSupport)) ⟨σ x, ⋯⟩) =
    τ ↑((hσ.zpowersEquivSupport.symm.trans ((zpowersEquivZPowers ⋯).trans hτ.zpowersEquivSupport)) ⟨x, hx⟩)

Tactic:
simp only [Perm.mul_apply, Equiv.trans_apply, Equiv.sumCongr_apply]

Result:
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
x : α
hx : x ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨σ x, ⋯⟩))) =
    τ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨x, hx⟩)))

Proof state:
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
x : α
hx : x ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨σ x, ⋯⟩))) =
    τ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨x, hx⟩)))

Tactic:
obtain ⟨n, rfl⟩ := hσ.exists_pow_eq (Classical.choose_spec hσ).1 (mem_support.1 hx)

Result:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport
        ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨σ ((σ ^ n) (Classical.choose hσ)), ⋯⟩))) =
    τ
      ↑(hτ.zpowersEquivSupport
          ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨(σ ^ n) (Classical.choose hσ), hx⟩)))

Proof state:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport
        ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨(σ ^ (n + 1)) (Classical.choose hσ), ⋯⟩))) =
    τ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) ⟨σ ^ n, ⋯⟩))

Tactic:
erw [hσ.zpowersEquivSupport_symm_apply (n + 1)]

Result:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) ⟨σ ^ (n + 1), ⋯⟩)) =
    τ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) ⟨σ ^ n, ⋯⟩))

Proof state:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑⟨(τ ^ (n + 1)) (Classical.choose hτ), ⋯⟩ = τ ↑(hτ.zpowersEquivSupport ⟨τ ^ n, ⋯⟩)

Tactic:
simp_rw [pow_succ', Perm.mul_apply]

Result:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ τ ((τ ^ n) (Classical.choose hτ)) = τ ↑(hτ.zpowersEquivSupport ⟨τ ^ n, ⋯⟩)

Proof state:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) ⟨σ ^ (n + 1), ⋯⟩)) =
    τ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) ⟨σ ^ n, ⋯⟩))

Tactic:
erw [zpowersEquivZPowers_apply, zpowersEquivZPowers_apply, zpowersEquivSupport_apply]

Result:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑⟨(τ ^ (n + 1)) (Classical.choose hτ), ⋯⟩ = τ ↑(hτ.zpowersEquivSupport ⟨τ ^ n, ⋯⟩)

Proof state:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport
        ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨σ ((σ ^ n) (Classical.choose hσ)), ⋯⟩))) =
    τ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) ⟨σ ^ n, ⋯⟩))

Tactic:
simp only [← Perm.mul_apply, ← pow_succ']

Result:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ ↑(hτ.zpowersEquivSupport
        ((zpowersEquivZPowers ⋯) (hσ.zpowersEquivSupport.symm ⟨(σ ^ (n + 1)) (Classical.choose hσ), ⋯⟩))) =
    τ ↑(hτ.zpowersEquivSupport ((zpowersEquivZPowers ⋯) ⟨σ ^ n, ⋯⟩))

Proof state:
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
⊢ ∀ (x : α) (hx : x ∈ ↑σ.support),
    ↑((hσ.zpowersEquivSupport.symm.trans ((zpowersEquivZPowers ⋯).trans hτ.zpowersEquivSupport)) ⟨σ x, ⋯⟩) =
      τ ↑((hσ.zpowersEquivSupport.symm.trans ((zpowersEquivZPowers ⋯).trans hτ.zpowersEquivSupport)) ⟨x, hx⟩)

Tactic:
intro x hx

Result:
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
x : α
hx : x ∈ ↑σ.support
⊢ ↑((hσ.zpowersEquivSupport.symm.trans ((zpowersEquivZPowers ⋯).trans hτ.zpowersEquivSupport)) ⟨σ x, ⋯⟩) =
    τ ↑((hσ.zpowersEquivSupport.symm.trans ((zpowersEquivZPowers ⋯).trans hτ.zpowersEquivSupport)) ⟨x, hx⟩)

Proof state:
case intro
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
n : ℕ
hx : (σ ^ n) (Classical.choose hσ) ∈ ↑σ.support
⊢ τ ((τ ^ n) (Classical.choose hτ)) = τ ↑(hτ.zpowersEquivSupport ⟨τ ^ n, ⋯⟩)

Tactic:
rfl

Result:
no goals

Proof state:
α : Type u_2
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
hσ : σ.IsCycle
hτ : τ.IsCycle
h : #σ.support = #τ.support
⊢ orderOf σ = orderOf τ

Tactic:
rw [hσ.orderOf, h, hτ.orderOf]

Result:
no goals