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

tactic: classical
  obtain ⟨n, rfl⟩ := hf.2 ha hb
  obtain ⟨k, hk⟩ := (Int.mod_modEq n s.card).symm.dvd
  refine ⟨n.natMod s.card, Int.natMod_lt (Nonempty.card_pos ⟨a, ha⟩).ne', ?_⟩
  rw [← zpow_natCast, Int.natMod,
    Int.toNat_of_nonneg (Int.emod_nonneg _ <| Nat.cast_ne_zero.2
      (Nonempty.card_pos ⟨a, ha⟩).ne'), sub_eq_iff_eq_add'.1 hk, zpow_add, zpow_mul]
  simp only [zpow_natCast, coe_mul, comp_apply, EmbeddingLike.apply_eq_iff_eq]
  exact IsFixedPt.perm_zpow (hf.pow_card_apply 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
hb : b ∈ s
⊢ ∃ n < s.card, (f ^ n) a = b
state_after: no goals

tactic: obtain ⟨n, rfl⟩ := hf.2 ha hb
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
hb : b ∈ s
⊢ ∃ n < s.card, (f ^ n) a = b
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
⊢ ∃ n_1 < s.card, (f ^ n_1) a = (f ^ n) a

tactic: obtain ⟨k, hk⟩ := (Int.mod_modEq n s.card).symm.dvd
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
⊢ ∃ n_1 < s.card, (f ^ n_1) a = (f ^ n) a
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
k : ℤ
hk : n % ↑s.card - n = ↑s.card * k
⊢ ∃ n_1 < s.card, (f ^ n_1) a = (f ^ n) a

tactic: refine ⟨n.natMod s.card, Int.natMod_lt (Nonempty.card_pos ⟨a, ha⟩).ne', ?_⟩
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
k : ℤ
hk : n % ↑s.card - n = ↑s.card * k
⊢ ∃ n_1 < s.card, (f ^ n_1) a = (f ^ n) a
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
k : ℤ
hk : n % ↑s.card - n = ↑s.card * k
⊢ (f ^ n.natMod ↑s.card) a = (f ^ n) a

tactic: rw [← zpow_natCast, Int.natMod,
  Int.toNat_of_nonneg (Int.emod_nonneg _ <| Nat.cast_ne_zero.2
    (Nonempty.card_pos ⟨a, ha⟩).ne'), sub_eq_iff_eq_add'.1 hk, zpow_add, zpow_mul]
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
k : ℤ
hk : n % ↑s.card - n = ↑s.card * k
⊢ (f ^ n.natMod ↑s.card) a = (f ^ n) a
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
k : ℤ
hk : n % ↑s.card - n = ↑s.card * k
⊢ (f ^ n * (f ^ ↑s.card) ^ k) a = (f ^ n) a

tactic: simp only [zpow_natCast, coe_mul, comp_apply, EmbeddingLike.apply_eq_iff_eq]
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
k : ℤ
hk : n % ↑s.card - n = ↑s.card * k
⊢ (f ^ n * (f ^ ↑s.card) ^ k) a = (f ^ n) a
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
k : ℤ
hk : n % ↑s.card - n = ↑s.card * k
⊢ ((f ^ s.card) ^ k) a = a

tactic: exact IsFixedPt.perm_zpow (hf.pow_card_apply ha) _
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
s✝ t : Set α
a x y : α
s : Finset α
hf : f.IsCycleOn ↑s
ha : a ∈ s
n : ℤ
hb : (f ^ n) a ∈ s
k : ℤ
hk : n % ↑s.card - n = ↑s.card * k
⊢ ((f ^ s.card) ^ k) a = a
state_after: no goals