Theorem: Equiv.Perm.IsCycle.pow_iff
File: Mathlib/GroupTheory/Perm/Cycle/Basic.lean

tactic: cases nonempty_fintype β
state_before: ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
⊢ IsCycle (f ^ n) ↔ Nat.coprime n (orderOf f)

tactic: constructor
state_before: case intro
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
⊢ IsCycle (f ^ n) ↔ Nat.coprime n (orderOf f)

tactic: intro h
state_before: case intro.mp
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
⊢ IsCycle (f ^ n) → Nat.coprime n (orderOf f)

tactic: have hr : support (f ^ n) = support f := by
  rw [hf.support_pow_eq_iff]
  rintro ⟨k, rfl⟩
  refine' h.ne_one _
  simp [pow_mul, pow_orderOf_eq_one]
state_before: case intro.mp
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : IsCycle (f ^ n)
⊢ Nat.coprime n (orderOf f)

tactic: have : orderOf (f ^ n) = orderOf f := by rw [h.orderOf, hr, hf.orderOf]
state_before: case intro.mp
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : IsCycle (f ^ n)
hr : support (f ^ n) = support f
⊢ Nat.coprime n (orderOf f)

tactic: rw [orderOf_pow, Nat.div_eq_self] at this
state_before: case intro.mp
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : IsCycle (f ^ n)
hr : support (f ^ n) = support f
this : orderOf (f ^ n) = orderOf f
⊢ Nat.coprime n (orderOf f)

tactic: cases' this with h
state_before: case intro.mp
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : IsCycle (f ^ n)
hr : support (f ^ n) = support f
this : orderOf f = 0 ∨ Nat.gcd (orderOf f) n = 1
⊢ Nat.coprime n (orderOf f)

tactic: rw [hf.support_pow_eq_iff]
state_before: ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : IsCycle (f ^ n)
⊢ support (f ^ n) = support f

tactic: rintro ⟨k, rfl⟩
state_before: ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : IsCycle (f ^ n)
⊢ ¬orderOf f ∣ n

tactic: refine' h.ne_one _
state_before: case intro
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
k : ℕ
h : IsCycle (f ^ (orderOf f * k))
⊢ False

tactic: simp [pow_mul, pow_orderOf_eq_one]
state_before: case intro
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
k : ℕ
h : IsCycle (f ^ (orderOf f * k))
⊢ f ^ (orderOf f * k) = 1

tactic: rw [h.orderOf, hr, hf.orderOf]
state_before: ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : IsCycle (f ^ n)
hr : support (f ^ n) = support f
⊢ orderOf (f ^ n) = orderOf f

tactic: exact absurd h (orderOf_pos _).ne'
state_before: case intro.mp.inl
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h✝ : IsCycle (f ^ n)
hr : support (f ^ n) = support f
h : orderOf f = 0
⊢ Nat.coprime n (orderOf f)

tactic: rwa [Nat.coprime_iff_gcd_eq_one, Nat.gcd_comm]
state_before: case intro.mp.inr
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : IsCycle (f ^ n)
hr : support (f ^ n) = support f
h✝ : Nat.gcd (orderOf f) n = 1
⊢ Nat.coprime n (orderOf f)

tactic: intro h
state_before: case intro.mpr
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
⊢ Nat.coprime n (orderOf f) → IsCycle (f ^ n)

tactic: obtain ⟨m, hm⟩ := exists_pow_eq_self_of_coprime h
state_before: case intro.mpr
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : Nat.coprime n (orderOf f)
⊢ IsCycle (f ^ n)

tactic: have hf' : IsCycle ((f ^ n) ^ m) := by rwa [hm]
state_before: case intro.mpr.intro
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : Nat.coprime n (orderOf f)
m : ℕ
hm : (f ^ n) ^ m = f
⊢ IsCycle (f ^ n)

tactic: refine' hf'.of_pow fun x hx => _
state_before: case intro.mpr.intro
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : Nat.coprime n (orderOf f)
m : ℕ
hm : (f ^ n) ^ m = f
hf' : IsCycle ((f ^ n) ^ m)
⊢ IsCycle (f ^ n)

tactic: rw [hm]
state_before: case intro.mpr.intro
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : Nat.coprime n (orderOf f)
m : ℕ
hm : (f ^ n) ^ m = f
hf' : IsCycle ((f ^ n) ^ m)
x : β
hx : x ∈ support (f ^ n)
⊢ x ∈ support ((f ^ n) ^ m)

tactic: exact support_pow_le _ n hx
state_before: case intro.mpr.intro
ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : Nat.coprime n (orderOf f)
m : ℕ
hm : (f ^ n) ^ m = f
hf' : IsCycle ((f ^ n) ^ m)
x : β
hx : x ∈ support (f ^ n)
⊢ x ∈ support f

tactic: rwa [hm]
state_before: ι : Type ?u.1194880
α : Type ?u.1194883
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
n : ℕ
val✝ : Fintype β
h : Nat.coprime n (orderOf f)
m : ℕ
hm : (f ^ n) ^ m = f
⊢ IsCycle ((f ^ n) ^ m)