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

tactic: ext j
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
⊢ snoc (update p i y) x = update (snoc p x) i.castSucc y
state_after: case h
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
⊢ snoc (update p i y) x j = update (snoc p x) i.castSucc y j

tactic: by_cases h : j.val < n
state_before: case h
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
⊢ snoc (update p i y) x j = update (snoc p x) i.castSucc y j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ snoc (update p i y) x j = update (snoc p x) i.castSucc y j

case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ¬↑j < n
⊢ snoc (update p i y) x j = update (snoc p x) i.castSucc y j

tactic: rw [snoc]
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ snoc (update p i y) x j = update (snoc p x) i.castSucc y j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ (if h : ↑j < n then _root_.cast ⋯ (update p i y (j.castLT h)) else _root_.cast ⋯ x) = update (snoc p x) i.castSucc y j

tactic: simp only [h]
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ (if h : ↑j < n then _root_.cast ⋯ (update p i y (j.castLT h)) else _root_.cast ⋯ x) = update (snoc p x) i.castSucc y j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ (if h_1 : True then _root_.cast ⋯ (update p i y (j.castLT ⋯)) else _root_.cast ⋯ x) = update (snoc p x) i.castSucc y j

tactic: simp only [dif_pos]
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ (if h_1 : True then _root_.cast ⋯ (update p i y (j.castLT ⋯)) else _root_.cast ⋯ x) = update (snoc p x) i.castSucc y j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j

tactic: by_cases h' : j = castSucc i
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j

case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j

tactic: have C1 : α (castSucc i) = α j := by rw [h']
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j

tactic: have C2 : α (castSucc i) = α (castSucc (castLT j h)) := by rw [castSucc_castLT, h']
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j

tactic: rw [E1, E2]
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
E2 : update p i y (j.castLT h) = _root_.cast C2 y
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
E2 : update p i y (j.castLT h) = _root_.cast C2 y
⊢ _root_.cast ⋯ (_root_.cast C2 y) = _root_.cast C1 y

tactic: exact eq_rec_compose (Eq.trans C2.symm C1) C2 y
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
E2 : update p i y (j.castLT h) = _root_.cast C2 y
⊢ _root_.cast ⋯ (_root_.cast C2 y) = _root_.cast C1 y
state_after: no goals

tactic: rw [h']
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
⊢ α i.castSucc = α j
state_after: no goals

tactic: have : update (snoc p x) j (_root_.cast C1 y) j = _root_.cast C1 y := by simp
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
⊢ update (snoc p x) i.castSucc y j = _root_.cast C1 y
state_after: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
this : update (snoc p x) j (_root_.cast C1 y) j = _root_.cast C1 y
⊢ update (snoc p x) i.castSucc y j = _root_.cast C1 y

tactic: convert this
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
this : update (snoc p x) j (_root_.cast C1 y) j = _root_.cast C1 y
⊢ update (snoc p x) i.castSucc y j = _root_.cast C1 y
state_after: case h.e'_2.h.e'_5
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
this : update (snoc p x) j (_root_.cast C1 y) j = _root_.cast C1 y
⊢ i.castSucc = j

case h.e'_2.h.e'_6
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
this : update (snoc p x) j (_root_.cast C1 y) j = _root_.cast C1 y
e_5✝ : i.castSucc = j
⊢ HEq y (_root_.cast C1 y)

tactic: simp
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
⊢ update (snoc p x) j (_root_.cast C1 y) j = _root_.cast C1 y
state_after: no goals

tactic: exact h'.symm
state_before: case h.e'_2.h.e'_5
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
this : update (snoc p x) j (_root_.cast C1 y) j = _root_.cast C1 y
⊢ i.castSucc = j
state_after: no goals

tactic: exact heq_of_cast_eq (congr_arg α (Eq.symm h')) rfl
state_before: case h.e'_2.h.e'_6
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
this : update (snoc p x) j (_root_.cast C1 y) j = _root_.cast C1 y
e_5✝ : i.castSucc = j
⊢ HEq y (_root_.cast C1 y)
state_after: no goals

tactic: rw [castSucc_castLT, h']
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
⊢ α i.castSucc = α (j.castLT h).castSucc
state_after: no goals

tactic: have : update p (castLT j h) (_root_.cast C2 y) (castLT j h) = _root_.cast C2 y := by simp
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
⊢ update p i y (j.castLT h) = _root_.cast C2 y
state_after: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
this : update p (j.castLT h) (_root_.cast C2 y) (j.castLT h) = _root_.cast C2 y
⊢ update p i y (j.castLT h) = _root_.cast C2 y

tactic: convert this
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
this : update p (j.castLT h) (_root_.cast C2 y) (j.castLT h) = _root_.cast C2 y
⊢ update p i y (j.castLT h) = _root_.cast C2 y
state_after: case h.e'_2.h.e'_5
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
this : update p (j.castLT h) (_root_.cast C2 y) (j.castLT h) = _root_.cast C2 y
⊢ i = j.castLT h

case h.e'_2.h.e'_6
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
this : update p (j.castLT h) (_root_.cast C2 y) (j.castLT h) = _root_.cast C2 y
e_5✝ : i = j.castLT h
⊢ HEq y (_root_.cast C2 y)

tactic: simp
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
⊢ update p (j.castLT h) (_root_.cast C2 y) (j.castLT h) = _root_.cast C2 y
state_after: no goals

tactic: simp [h, h']
state_before: case h.e'_2.h.e'_5
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
this : update p (j.castLT h) (_root_.cast C2 y) (j.castLT h) = _root_.cast C2 y
⊢ i = j.castLT h
state_after: no goals

tactic: exact heq_of_cast_eq C2 rfl
state_before: case h.e'_2.h.e'_6
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : j = i.castSucc
C1 : α i.castSucc = α j
E1 : update (snoc p x) i.castSucc y j = _root_.cast C1 y
C2 : α i.castSucc = α (j.castLT h).castSucc
this : update p (j.castLT h) (_root_.cast C2 y) (j.castLT h) = _root_.cast C2 y
e_5✝ : i = j.castLT h
⊢ HEq y (_root_.cast C2 y)
state_after: no goals

tactic: have : ¬castLT j h = i := by
  intro E
  apply h'
  rw [← E, castSucc_castLT]
state_before: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j
state_after: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
this : ¬j.castLT h = i
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j

tactic: simp [h', this, snoc, h]
state_before: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
this : ¬j.castLT h = i
⊢ _root_.cast ⋯ (update p i y (j.castLT ⋯)) = update (snoc p x) i.castSucc y j
state_after: no goals

tactic: intro E
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
⊢ ¬j.castLT h = i
state_after: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
E : j.castLT h = i
⊢ False

tactic: apply h'
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
E : j.castLT h = i
⊢ False
state_after: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
E : j.castLT h = i
⊢ j = i.castSucc

tactic: rw [← E, castSucc_castLT]
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
h' : ¬j = i.castSucc
E : j.castLT h = i
⊢ j = i.castSucc
state_after: no goals

tactic: rw [eq_last_of_not_lt h]
state_before: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ¬↑j < n
⊢ snoc (update p i y) x j = update (snoc p x) i.castSucc y j
state_after: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ¬↑j < n
⊢ snoc (update p i y) x (last n) = update (snoc p x) i.castSucc y (last n)

tactic: simp [Ne.symm (ne_of_lt (castSucc_lt_last i))]
state_before: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ¬↑j < n
⊢ snoc (update p i y) x (last n) = update (snoc p x) i.castSucc y (last n)
state_after: no goals