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

tactic: cases nonempty_fintype β
state_before: ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
⊢ f ^ a = f ^ b ↔ ∃ x, ↑f x ≠ x ∧ ↑(f ^ a) x = ↑(f ^ b) x

tactic: constructor
state_before: case intro
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
val✝ : Fintype β
⊢ f ^ a = f ^ b ↔ ∃ x, ↑f x ≠ x ∧ ↑(f ^ a) x = ↑(f ^ b) x

tactic: intro h
state_before: case intro.mp
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
val✝ : Fintype β
⊢ f ^ a = f ^ b → ∃ x, ↑f x ≠ x ∧ ↑(f ^ a) x = ↑(f ^ b) x

tactic: obtain ⟨x, hx, -⟩ := id hf
state_before: case intro.mp
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
val✝ : Fintype β
h : f ^ a = f ^ b
⊢ ∃ x, ↑f x ≠ x ∧ ↑(f ^ a) x = ↑(f ^ b) x

tactic: exact ⟨x, hx, by simp [h]⟩
state_before: case intro.mp.intro.intro
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
val✝ : Fintype β
h : f ^ a = f ^ b
x : β
hx : ↑f x ≠ x
⊢ ∃ x, ↑f x ≠ x ∧ ↑(f ^ a) x = ↑(f ^ b) x

tactic: simp [h]
state_before: ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
val✝ : Fintype β
h : f ^ a = f ^ b
x : β
hx : ↑f x ≠ x
⊢ ↑(f ^ a) x = ↑(f ^ b) x

tactic: rintro ⟨x, hx, hx'⟩
state_before: case intro.mpr
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
val✝ : Fintype β
⊢ (∃ x, ↑f x ≠ x ∧ ↑(f ^ a) x = ↑(f ^ b) x) → f ^ a = f ^ b

tactic: wlog hab : a ≤ b generalizing a b
state_before: case intro.mpr.intro.intro
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
hx' : ↑(f ^ a) x = ↑(f ^ b) x
⊢ f ^ a = f ^ b

tactic: suffices f ^ (b - a) = 1 by
  rw [pow_sub _ hab, mul_inv_eq_one] at this
  rw [this]
state_before: ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
⊢ f ^ a = f ^ b

tactic: rw [hf.pow_eq_one_iff]
state_before: ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
⊢ f ^ (b - a) = 1

tactic: by_cases hfa : (f ^ a) x ∈ f.support
state_before: ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
⊢ ∃ x, ↑f x ≠ x ∧ ↑(f ^ (b - a)) x = x

tactic: exact (this hx'.symm (le_of_not_le hab)).symm
state_before: case intro.mpr.intro.intro.inr
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
a b : ℕ
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
hx' : ↑(f ^ a) x = ↑(f ^ b) x
this : ∀ {a b : ℕ}, ↑(f ^ a) x = ↑(f ^ b) x → a ≤ b → f ^ a = f ^ b
hab : ¬a ≤ b
⊢ f ^ a = f ^ b

tactic: rw [pow_sub _ hab, mul_inv_eq_one] at this
state_before: ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
this : f ^ (b - a) = 1
⊢ f ^ a = f ^ b

tactic: rw [this]
state_before: ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
this : f ^ b = f ^ a
⊢ f ^ a = f ^ b

tactic: refine' ⟨(f ^ a) x, mem_support.mp hfa, _⟩
state_before: case pos
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
hfa : ↑(f ^ a) x ∈ support f
⊢ ∃ x, ↑f x ≠ x ∧ ↑(f ^ (b - a)) x = x

tactic: simp only [pow_sub _ hab, Equiv.Perm.coe_mul, Function.comp_apply, inv_apply_self, ← hx']
state_before: case pos
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
hfa : ↑(f ^ a) x ∈ support f
⊢ ↑(f ^ (b - a)) (↑(f ^ a) x) = ↑(f ^ a) x

tactic: have h := @Equiv.Perm.zpow_apply_comm _ f 1 a x
state_before: case neg
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
hfa : ¬↑(f ^ a) x ∈ support f
⊢ ∃ x, ↑f x ≠ x ∧ ↑(f ^ (b - a)) x = x

tactic: simp only [zpow_one, zpow_ofNat] at h
state_before: case neg
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
hfa : ¬↑(f ^ a) x ∈ support f
h : ↑(f ^ 1) (↑(f ^ ↑a) x) = ↑(f ^ ↑a) (↑(f ^ 1) x)
⊢ ∃ x, ↑f x ≠ x ∧ ↑(f ^ (b - a)) x = x

tactic: rw [not_mem_support, h, Function.Injective.eq_iff (f ^ a).injective] at hfa
state_before: case neg
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
hfa : ¬↑(f ^ a) x ∈ support f
h : ↑f (↑(f ^ a) x) = ↑(f ^ a) (↑f x)
⊢ ∃ x, ↑f x ≠ x ∧ ↑(f ^ (b - a)) x = x

tactic: contradiction
state_before: case neg
ι : Type ?u.1415307
α : Type ?u.1415310
β : Type u_1
f✝ g : Perm α
x✝ y : α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : Finite β
f : Perm β
hf : IsCycle f
val✝ : Fintype β
x : β
hx : ↑f x ≠ x
a b : ℕ
hx' : ↑(f ^ a) x = ↑(f ^ b) x
hab : a ≤ b
hfa : ↑f x = x
h : ↑f (↑(f ^ a) x) = ↑(f ^ a) (↑f x)
⊢ ∃ x, ↑f x ≠ x ∧ ↑(f ^ (b - a)) x = x