Theorem: Fin.insertNth_last
File: Mathlib/Data/Fin/Tuple/Basic.lean

tactic: refine insertNth_eq_iff.2 ⟨by simp, ?_⟩
state_before: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
⊢ (last n).insertNth x p = snoc (fun j => _root_.cast ⋯ (p j)) x
state_after: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
⊢ p = fun j => snoc (fun j => _root_.cast ⋯ (p j)) x ((last n).succAbove j)

tactic: ext j
state_before: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
⊢ p = fun j => snoc (fun j => _root_.cast ⋯ (p j)) x ((last n).succAbove j)
state_after: case h
m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ p j = snoc (fun j => _root_.cast ⋯ (p j)) x ((last n).succAbove j)

tactic: apply eq_of_heq
state_before: case h
m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ p j = snoc (fun j => _root_.cast ⋯ (p j)) x ((last n).succAbove j)
state_after: case h.h
m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ HEq (p j) (snoc (fun j => _root_.cast ⋯ (p j)) x ((last n).succAbove j))

tactic: trans snoc (fun j ↦ _root_.cast (congr_arg α (succAbove_last_apply j)) (p j)) x (castSucc j)
state_before: case h.h
m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ HEq (p j) (snoc (fun j => _root_.cast ⋯ (p j)) x ((last n).succAbove j))
state_after: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ HEq (p j) (snoc (fun j => _root_.cast ⋯ (p j)) x j.castSucc)

m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ HEq (snoc (fun j => _root_.cast ⋯ (p j)) x j.castSucc) (snoc (fun j => _root_.cast ⋯ (p j)) x ((last n).succAbove j))

tactic: simp
state_before: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
⊢ snoc (fun j => _root_.cast ⋯ (p j)) x (last n) = x
state_after: no goals

tactic: rw [snoc_castSucc]
state_before: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ HEq (p j) (snoc (fun j => _root_.cast ⋯ (p j)) x j.castSucc)
state_after: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ HEq (p j) (_root_.cast ⋯ (p j))

tactic: exact (cast_heq _ _).symm
state_before: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ HEq (p j) (_root_.cast ⋯ (p j))
state_after: no goals

tactic: apply congr_arg_heq
state_before: m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ HEq (snoc (fun j => _root_.cast ⋯ (p j)) x j.castSucc) (snoc (fun j => _root_.cast ⋯ (p j)) x ((last n).succAbove j))
state_after: case a
m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ j.castSucc = (last n).succAbove j

tactic: rw [succAbove_last]
state_before: case a
m n : ℕ
α : Fin (n + 1) → Type u
β : Type v
x : α (last n)
p : (j : Fin n) → α ((last n).succAbove j)
j : Fin n
⊢ j.castSucc = (last n).succAbove j
state_after: no goals