Theorem: List.formPerm_pow_length_eq_one_of_nodup
File: Mathlib/GroupTheory/Perm/List.lean

tactic: ext x
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
⊢ l.formPerm ^ l.length = 1
state_after: case H
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
⊢ (l.formPerm ^ l.length) x = 1 x

tactic: by_cases hx : x ∈ l
state_before: case H
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
⊢ (l.formPerm ^ l.length) x = 1 x
state_after: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∈ l
⊢ (l.formPerm ^ l.length) x = 1 x

case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
⊢ (l.formPerm ^ l.length) x = 1 x

tactic: obtain ⟨k, hk, rfl⟩ := getElem_of_mem hx
state_before: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∈ l
⊢ (l.formPerm ^ l.length) x = 1 x
state_after: case pos.intro.intro
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l[k] ∈ l
⊢ (l.formPerm ^ l.length) l[k] = 1 l[k]

tactic: simp [formPerm_pow_apply_getElem _ hl, Nat.mod_eq_of_lt hk]
state_before: case pos.intro.intro
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l[k] ∈ l
⊢ (l.formPerm ^ l.length) l[k] = 1 l[k]
state_after: no goals

tactic: have : x ∉ { x | (l.formPerm ^ l.length) x ≠ x } := by
  intro H
  refine hx ?_
  replace H := set_support_zpow_subset l.formPerm l.length H
  simpa using support_formPerm_le' _ H
state_before: case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
⊢ (l.formPerm ^ l.length) x = 1 x
state_after: case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
this : x ∉ {x | (l.formPerm ^ l.length) x ≠ x}
⊢ (l.formPerm ^ l.length) x = 1 x

tactic: simpa using this
state_before: case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
this : x ∉ {x | (l.formPerm ^ l.length) x ≠ x}
⊢ (l.formPerm ^ l.length) x = 1 x
state_after: no goals

tactic: intro H
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
⊢ x ∉ {x | (l.formPerm ^ l.length) x ≠ x}
state_after: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
H : x ∈ {x | (l.formPerm ^ l.length) x ≠ x}
⊢ False

tactic: refine hx ?_
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
H : x ∈ {x | (l.formPerm ^ l.length) x ≠ x}
⊢ False
state_after: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
H : x ∈ {x | (l.formPerm ^ l.length) x ≠ x}
⊢ x ∈ l

tactic: replace H := set_support_zpow_subset l.formPerm l.length H
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
H : x ∈ {x | (l.formPerm ^ l.length) x ≠ x}
⊢ x ∈ l
state_after: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
H : x ∈ {x | l.formPerm x ≠ x}
⊢ x ∈ l

tactic: simpa using support_formPerm_le' _ H
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∉ l
H : x ∈ {x | l.formPerm x ≠ x}
⊢ x ∈ l
state_after: no goals