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

Proof steps:
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
⊢ append (cons a as) bs = cons a (append as bs) ∘ cast ⋯
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : Fin (n + 1 + m)
⊢ append (cons a as) bs i = (cons a (append as bs) ∘ cast ⋯) i
tactic: funext i
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : Fin (n + 1 + m)
⊢ append (cons a as) bs i = (cons a (append as bs) ∘ cast ⋯) i
state_after: case h.mk
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i < n + 1 + m
⊢ append (cons a as) bs ⟨i, isLt✝⟩ = (cons a (append as bs) ∘ cast ⋯) ⟨i, isLt✝⟩
tactic: rcases i with ⟨i, -⟩
state_before: case h.mk
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i < n + 1 + m
⊢ append (cons a as) bs ⟨i, isLt✝⟩ = (cons a (append as bs) ∘ cast ⋯) ⟨i, isLt✝⟩
state_after: case h.mk
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i < n + 1 + m
⊢ (if h : i < n + 1 then cases a as ⟨i, ⋯⟩ else ⋯ ▸ bs (subNat (n + 1) ⟨i, ⋯⟩ ⋯)) = cases a (addCases as bs) ⟨i, ⋯⟩
tactic: simp only [append, addCases, cons, castLT, cast, comp_apply]
state_before: case h.mk
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i < n + 1 + m
⊢ (if h : i < n + 1 then cases a as ⟨i, ⋯⟩ else ⋯ ▸ bs (subNat (n + 1) ⟨i, ⋯⟩ ⋯)) = cases a (addCases as bs) ⟨i, ⋯⟩
state_after: case h.mk.zero
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
isLt✝ : 0 < n + 1 + m
⊢ (if h : 0 < n + 1 then cases a as ⟨0, ⋯⟩ else ⋯ ▸ bs (subNat (n + 1) ⟨0, ⋯⟩ ⋯)) = cases a (addCases as bs) ⟨0, ⋯⟩

case h.mk.succ
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
⊢ (if h : i + 1 < n + 1 then cases a as ⟨i + 1, ⋯⟩ else ⋯ ▸ bs (subNat (n + 1) ⟨i + 1, ⋯⟩ ⋯)) =
    cases a (addCases as bs) ⟨i + 1, ⋯⟩
tactic: cases' i with i