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

tactic: obtain ⟨⟨k, hk⟩, rfl⟩ := get_of_mem hx
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x✝ : α
hl : l.Nodup
x : α
hx : x ∈ l
⊢ l.formPerm x = x ↔ l.length ≤ 1
state_after: case intro.mk
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
⊢ l.formPerm (l.get ⟨k, hk⟩) = l.get ⟨k, hk⟩ ↔ l.length ≤ 1

tactic: rw [formPerm_apply_get _ hl ⟨k, hk⟩, hl.get_inj_iff, Fin.mk.inj_iff]
state_before: case intro.mk
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
⊢ l.formPerm (l.get ⟨k, hk⟩) = l.get ⟨k, hk⟩ ↔ l.length ≤ 1
state_after: case intro.mk
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
⊢ (↑⟨k, hk⟩ + 1) % l.length = k ↔ l.length ≤ 1

tactic: simp only [Fin.val_mk]
state_before: case intro.mk
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
⊢ (↑⟨k, hk⟩ + 1) % l.length = k ↔ l.length ≤ 1
state_after: case intro.mk
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
⊢ (k + 1) % l.length = k ↔ l.length ≤ 1

tactic: cases hn : l.length
state_before: case intro.mk
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
⊢ (k + 1) % l.length = k ↔ l.length ≤ 1
state_after: case intro.mk.zero
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
hn : l.length = 0
⊢ (k + 1) % 0 = k ↔ 0 ≤ 1

case intro.mk.succ
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
n✝ : ℕ
hn : l.length = n✝ + 1
⊢ (k + 1) % (n✝ + 1) = k ↔ n✝ + 1 ≤ 1

tactic: exact absurd k.zero_le (hk.trans_le hn.le).not_le
state_before: case intro.mk.zero
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
hn : l.length = 0
⊢ (k + 1) % 0 = k ↔ 0 ≤ 1
state_after: no goals

tactic: rw [hn] at hk
state_before: case intro.mk.succ
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk : k < l.length
hx : l.get ⟨k, hk⟩ ∈ l
n✝ : ℕ
hn : l.length = n✝ + 1
⊢ (k + 1) % (n✝ + 1) = k ↔ n✝ + 1 ≤ 1
state_after: case intro.mk.succ
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk✝ : k < l.length
hx : l.get ⟨k, hk✝⟩ ∈ l
n✝ : ℕ
hk : k < n✝ + 1
hn : l.length = n✝ + 1
⊢ (k + 1) % (n✝ + 1) = k ↔ n✝ + 1 ≤ 1

tactic: rcases (Nat.le_of_lt_succ hk).eq_or_lt with hk' | hk'
state_before: case intro.mk.succ
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk✝ : k < l.length
hx : l.get ⟨k, hk✝⟩ ∈ l
n✝ : ℕ
hk : k < n✝ + 1
hn : l.length = n✝ + 1
⊢ (k + 1) % (n✝ + 1) = k ↔ n✝ + 1 ≤ 1
state_after: case intro.mk.succ.inl
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk✝ : k < l.length
hx : l.get ⟨k, hk✝⟩ ∈ l
n✝ : ℕ
hk : k < n✝ + 1
hn : l.length = n✝ + 1
hk' : k = n✝
⊢ (k + 1) % (n✝ + 1) = k ↔ n✝ + 1 ≤ 1

case intro.mk.succ.inr
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk✝ : k < l.length
hx : l.get ⟨k, hk✝⟩ ∈ l
n✝ : ℕ
hk : k < n✝ + 1
hn : l.length = n✝ + 1
hk' : k < n✝
⊢ (k + 1) % (n✝ + 1) = k ↔ n✝ + 1 ≤ 1

tactic: simp [← hk', Nat.succ_le_succ_iff, eq_comm]
state_before: case intro.mk.succ.inl
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk✝ : k < l.length
hx : l.get ⟨k, hk✝⟩ ∈ l
n✝ : ℕ
hk : k < n✝ + 1
hn : l.length = n✝ + 1
hk' : k = n✝
⊢ (k + 1) % (n✝ + 1) = k ↔ n✝ + 1 ≤ 1
state_after: no goals

tactic: simpa [Nat.mod_eq_of_lt (Nat.succ_lt_succ hk'), Nat.succ_lt_succ_iff] using
  (k.zero_le.trans_lt hk').ne.symm
state_before: case intro.mk.succ.inr
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
hl : l.Nodup
k : ℕ
hk✝ : k < l.length
hx : l.get ⟨k, hk✝⟩ ∈ l
n✝ : ℕ
hk : k < n✝ + 1
hn : l.length = n✝ + 1
hk' : k < n✝
⊢ (k + 1) % (n✝ + 1) = k ↔ n✝ + 1 ≤ 1
state_after: no goals