Theorem: Equiv.Perm.mem_toList_iff
File: Mathlib/GroupTheory/Perm/Cycle/Concrete.lean

tactic: simp only [toList, mem_range, mem_map]
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
⊢ y ∈ p.toList x ↔ p.SameCycle x y ∧ x ∈ p.support
state_after: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
⊢ (∃ a < (p.cycleOf x).support.card, (p ^ a) x = y) ↔ p.SameCycle x y ∧ x ∈ p.support

tactic: constructor
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
⊢ (∃ a < (p.cycleOf x).support.card, (p ^ a) x = y) ↔ p.SameCycle x y ∧ x ∈ p.support
state_after: case mp
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
⊢ (∃ a < (p.cycleOf x).support.card, (p ^ a) x = y) → p.SameCycle x y ∧ x ∈ p.support

case mpr
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
⊢ p.SameCycle x y ∧ x ∈ p.support → ∃ a < (p.cycleOf x).support.card, (p ^ a) x = y

tactic: rintro ⟨n, hx, rfl⟩
state_before: case mp
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
⊢ (∃ a < (p.cycleOf x).support.card, (p ^ a) x = y) → p.SameCycle x y ∧ x ∈ p.support
state_after: case mp.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x : α
n : ℕ
hx : n < (p.cycleOf x).support.card
⊢ p.SameCycle x ((p ^ n) x) ∧ x ∈ p.support

tactic: refine ⟨⟨n, rfl⟩, ?_⟩
state_before: case mp.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x : α
n : ℕ
hx : n < (p.cycleOf x).support.card
⊢ p.SameCycle x ((p ^ n) x) ∧ x ∈ p.support
state_after: case mp.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x : α
n : ℕ
hx : n < (p.cycleOf x).support.card
⊢ x ∈ p.support

tactic: contrapose! hx
state_before: case mp.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x : α
n : ℕ
hx : n < (p.cycleOf x).support.card
⊢ x ∈ p.support
state_after: case mp.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x : α
n : ℕ
hx : x ∉ p.support
⊢ (p.cycleOf x).support.card ≤ n

tactic: rw [← support_cycleOf_eq_nil_iff] at hx
state_before: case mp.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x : α
n : ℕ
hx : x ∉ p.support
⊢ (p.cycleOf x).support.card ≤ n
state_after: case mp.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x : α
n : ℕ
hx : (p.cycleOf x).support = ∅
⊢ (p.cycleOf x).support.card ≤ n

tactic: simp [hx]
state_before: case mp.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x : α
n : ℕ
hx : (p.cycleOf x).support = ∅
⊢ (p.cycleOf x).support.card ≤ n
state_after: no goals

tactic: rintro ⟨h, hx⟩
state_before: case mpr
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
⊢ p.SameCycle x y ∧ x ∈ p.support → ∃ a < (p.cycleOf x).support.card, (p ^ a) x = y
state_after: case mpr.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
h : p.SameCycle x y
hx : x ∈ p.support
⊢ ∃ a < (p.cycleOf x).support.card, (p ^ a) x = y

tactic: simpa using h.exists_pow_eq_of_mem_support hx
state_before: case mpr.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
p : Perm α
x y : α
h : p.SameCycle x y
hx : x ∈ p.support
⊢ ∃ a < (p.cycleOf x).support.card, (p ^ a) x = y
state_after: no goals