Theorem: Equiv.Perm.IsCycleOn.pow_apply_eq
File: Mathlib/GroupTheory/Perm/Cycle/Basic.lean

tactic: obtain rfl | hs := Finset.eq_singleton_or_nontrivial ha
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
⊢ (f ^ n) a = a ↔ s.card ∣ n
state_after: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s t : Set α
a b x y : α
n : ℕ
hf : f.IsCycleOn ↑{a}
ha : a ∈ {a}
⊢ (f ^ n) a = a ↔ {a}.card ∣ n

case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
⊢ (f ^ n) a = a ↔ s.card ∣ n

tactic: classical
  have h : ∀ x ∈ s.attach, ¬f ↑x = ↑x := fun x _ => hf.apply_ne hs x.2
  have := (hf.isCycle_subtypePerm hs).orderOf
  simp only [coe_sort_coe, support_subtype_perm, ne_eq, decide_not, Bool.not_eq_true',
    decide_eq_false_iff_not, mem_attach, forall_true_left, Subtype.forall, filter_true_of_mem h,
    card_attach] at this
  rw [← this, orderOf_dvd_iff_pow_eq_one,
    (hf.isCycle_subtypePerm hs).pow_eq_one_iff'
      (ne_of_apply_ne ((↑) : s → α) <| hf.apply_ne hs (⟨a, ha⟩ : s).2)]
  simp
  erw [subtypePerm_apply]
  simp
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
⊢ (f ^ n) a = a ↔ s.card ∣ n
state_after: no goals

tactic: rw [coe_singleton, isCycleOn_singleton] at hf
state_before: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s t : Set α
a b x y : α
n : ℕ
hf : f.IsCycleOn ↑{a}
ha : a ∈ {a}
⊢ (f ^ n) a = a ↔ {a}.card ∣ n
state_after: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s t : Set α
a b x y : α
n : ℕ
hf : f a = a
ha : a ∈ {a}
⊢ (f ^ n) a = a ↔ {a}.card ∣ n

tactic: simpa using IsFixedPt.iterate hf n
state_before: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s t : Set α
a b x y : α
n : ℕ
hf : f a = a
ha : a ∈ {a}
⊢ (f ^ n) a = a ↔ {a}.card ∣ n
state_after: no goals

tactic: have h : ∀ x ∈ s.attach, ¬f ↑x = ↑x := fun x _ => hf.apply_ne hs x.2
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
⊢ (f ^ n) a = a ↔ s.card ∣ n
state_after: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
⊢ (f ^ n) a = a ↔ s.card ∣ n

tactic: have := (hf.isCycle_subtypePerm hs).orderOf
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
⊢ (f ^ n) a = a ↔ s.card ∣ n
state_after: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = (f.subtypePerm ⋯).support.card
⊢ (f ^ n) a = a ↔ s.card ∣ n

tactic: simp only [coe_sort_coe, support_subtype_perm, ne_eq, decide_not, Bool.not_eq_true',
  decide_eq_false_iff_not, mem_attach, forall_true_left, Subtype.forall, filter_true_of_mem h,
  card_attach] at this
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = (f.subtypePerm ⋯).support.card
⊢ (f ^ n) a = a ↔ s.card ∣ n
state_after: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = s.card
⊢ (f ^ n) a = a ↔ s.card ∣ n

tactic: rw [← this, orderOf_dvd_iff_pow_eq_one,
  (hf.isCycle_subtypePerm hs).pow_eq_one_iff'
    (ne_of_apply_ne ((↑) : s → α) <| hf.apply_ne hs (⟨a, ha⟩ : s).2)]
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = s.card
⊢ (f ^ n) a = a ↔ s.card ∣ n
state_after: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = s.card
⊢ (f ^ n) a = a ↔ (f.subtypePerm ⋯ ^ n) ⟨a, ha⟩ = ⟨a, ha⟩

tactic: simp
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = s.card
⊢ (f ^ n) a = a ↔ (f.subtypePerm ⋯ ^ n) ⟨a, ha⟩ = ⟨a, ha⟩
state_after: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = s.card
⊢ (f ^ n) a = a ↔ ((f ^ n).subtypePerm ⋯) ⟨a, ha⟩ = ⟨a, ha⟩

tactic: erw [subtypePerm_apply]
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = s.card
⊢ (f ^ n) a = a ↔ ((f ^ n).subtypePerm ⋯) ⟨a, ha⟩ = ⟨a, ha⟩
state_after: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = s.card
⊢ (f ^ n) a = a ↔ ⟨(f ^ n) ↑⟨a, ha⟩, ⋯⟩ = ⟨a, ha⟩

tactic: simp
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a b x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℕ
hs : s.Nontrivial
h : ∀ x ∈ s.attach, ¬f ↑x = ↑x
this : orderOf (f.subtypePerm ⋯) = s.card
⊢ (f ^ n) a = a ↔ ⟨(f ^ n) ↑⟨a, ha⟩, ⋯⟩ = ⟨a, ha⟩
state_after: no goals