Theorem: Equiv.Perm.closure_cycle_coprime_swap
File: Mathlib/GroupTheory/Perm/Closure.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (Fintype.card α)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
tactic: rw [← Finset.card_univ, ← h2, ← h1.orderOf] at h0
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
tactic: cases' exists_pow_eq_self_of_coprime h0 with m hm
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
h2' : (σ ^ n).support = ⊤
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
tactic: have h2' : (σ ^ n).support = ⊤ := Eq.trans (support_pow_coprime h0) h2
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
h2' : (σ ^ n).support = ⊤
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
h2' : (σ ^ n).support = ⊤
h1' : ((σ ^ n) ^ ↑m).IsCycle
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
tactic: have h1' : IsCycle ((σ ^ n) ^ (m : ℤ)) := by rwa [← hm] at h1
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
h2' : (σ ^ n).support = ⊤
h1' : ((σ ^ n) ^ ↑m).IsCycle
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
h2' : (σ ^ n).support = ⊤
h1' : (σ ^ n).IsCycle
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
tactic: replace h1' : IsCycle (σ ^ n) :=
    h1'.of_pow (le_trans (support_pow_le σ n) (ge_of_eq (congr_arg support hm)))
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
h2' : (σ ^ n).support = ⊤
h1' : (σ ^ n).IsCycle
⊢ closure {σ, swap x ((σ ^ n) x)} = ⊤
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
h2' : (σ ^ n).support = ⊤
h1' : (σ ^ n).IsCycle
⊢ σ ^ n ∈ ↑(closure {σ, swap x ((σ ^ n) x)}) ∧ {swap x ((σ ^ n) x)} ⊆ ↑(closure {σ, swap x ((σ ^ n) x)})
tactic: rw [eq_top_iff, ← closure_cycle_adjacent_swap h1' h2' x, closure_le, Set.insert_subset_iff]
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Finite β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
n : ℕ
σ : Perm α
h0 : n.Coprime (orderOf σ)
h1 : σ.IsCycle
h2 : σ.support = univ
x : α
m : ℕ
hm : (σ ^ n) ^ m = σ
h2' : (σ ^ n).support = ⊤
h1' : (σ ^ n).IsCycle
⊢ σ ^ n ∈ ↑(closure {σ, swap x ((σ ^ n) x)}) ∧ {swap x ((σ ^ n) x)} ⊆ ↑(closure {σ, swap x ((σ ^ n) x)})
state_after: no goals
tactic: exact
    ⟨Subgroup.pow_mem (closure _) (subset_closure (Set.mem_insert σ _)) n,
      Set.singleton_subset_iff.mpr (subset_closure (Set.mem_insert_of_mem _ (Set.mem_singleton _)))⟩