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

tactic: funext i
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: rcases i with ⟨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: 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
⊢ 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: cases' 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
⊢ (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: simp
state_before: 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, ⋯⟩
state_after: no goals

tactic: split_ifs with h
state_before: 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, ⋯⟩
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
h : i + 1 < n + 1
⊢ cases a as ⟨i + 1, ⋯⟩ = cases a (addCases as bs) ⟨i + 1, ⋯⟩

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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
h : ¬i + 1 < n + 1
⊢ ⋯ ▸ bs (subNat (n + 1) ⟨i + 1, ⋯⟩ ⋯) = cases a (addCases as bs) ⟨i + 1, ⋯⟩

tactic: have : i < n := Nat.lt_of_succ_lt_succ 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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
h : i + 1 < n + 1
⊢ cases a as ⟨i + 1, ⋯⟩ = cases a (addCases as bs) ⟨i + 1, ⋯⟩
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
h : i + 1 < n + 1
this : i < n
⊢ cases a as ⟨i + 1, ⋯⟩ = cases a (addCases as bs) ⟨i + 1, ⋯⟩

tactic: simp [addCases, this]
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
h : i + 1 < n + 1
this : i < n
⊢ cases a as ⟨i + 1, ⋯⟩ = cases a (addCases as bs) ⟨i + 1, ⋯⟩
state_after: no goals

tactic: have : ¬i < n := Nat.not_le.mpr <| Nat.lt_succ.mp <| Nat.not_le.mp 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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
h : ¬i + 1 < n + 1
⊢ ⋯ ▸ bs (subNat (n + 1) ⟨i + 1, ⋯⟩ ⋯) = cases a (addCases as bs) ⟨i + 1, ⋯⟩
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
h : ¬i + 1 < n + 1
this : ¬i < n
⊢ ⋯ ▸ bs (subNat (n + 1) ⟨i + 1, ⋯⟩ ⋯) = cases a (addCases as bs) ⟨i + 1, ⋯⟩

tactic: simp [addCases, this]
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)
α : Type u_1
a : α
as : Fin n → α
bs : Fin m → α
i : ℕ
isLt✝ : i + 1 < n + 1 + m
h : ¬i + 1 < n + 1
this : ¬i < n
⊢ ⋯ ▸ bs (subNat (n + 1) ⟨i + 1, ⋯⟩ ⋯) = cases a (addCases as bs) ⟨i + 1, ⋯⟩
state_after: no goals