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

tactic: ext i
state_before: m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i : Fin n
y : α✝ (succ i)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
⊢ append (append a b) c = append a (append b c) ∘ ↑(cast (_ : m + n + p = m + (n + p)))

tactic: rw [Function.comp_apply]
state_before: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
⊢ append (append a b) c i = (append a (append b c) ∘ ↑(cast (_ : m + n + p = m + (n + p)))) i

tactic: refine' Fin.addCases (fun l => _) (fun r => _) i
state_before: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
⊢ append (append a b) c i = append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) i)

tactic: rw [append_left]
state_before: case h.refine'_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
l : Fin (m + n)
⊢ append (append a b) c (↑(castAdd p) l) =
    append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) (↑(castAdd p) l))

tactic: refine' Fin.addCases (fun ll => _) (fun lr => _) l
state_before: case h.refine'_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
l : Fin (m + n)
⊢ append a b l = append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) (↑(castAdd p) l))

tactic: rw [append_left]
state_before: case h.refine'_1.refine'_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
l : Fin (m + n)
ll : Fin m
⊢ append a b (↑(castAdd n) ll) =
    append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) (↑(castAdd p) (↑(castAdd n) ll)))

tactic: simp [castAdd_castAdd]
state_before: case h.refine'_1.refine'_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
l : Fin (m + n)
ll : Fin m
⊢ a ll = append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) (↑(castAdd p) (↑(castAdd n) ll)))

tactic: rw [append_right]
state_before: case h.refine'_1.refine'_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
l : Fin (m + n)
lr : Fin n
⊢ append a b (↑(natAdd m) lr) =
    append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) (↑(castAdd p) (↑(natAdd m) lr)))

tactic: simp [castAdd_natAdd]
state_before: case h.refine'_1.refine'_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
l : Fin (m + n)
lr : Fin n
⊢ b lr = append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) (↑(castAdd p) (↑(natAdd m) lr)))

tactic: rw [append_right]
state_before: case h.refine'_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
r : Fin p
⊢ append (append a b) c (↑(natAdd (m + n)) r) =
    append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) (↑(natAdd (m + n)) r))

tactic: simp [← natAdd_natAdd]
state_before: case h.refine'_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p✝ : (i : Fin n) → α✝ (succ i)
i✝ : Fin n
y : α✝ (succ i✝)
z : α✝ 0
p : ℕ
α : Type u_1
a : Fin m → α
b : Fin n → α
c : Fin p → α
i : Fin (m + n + p)
r : Fin p
⊢ c r = append a (append b c) (↑(cast (_ : m + n + p = m + (n + p))) (↑(natAdd (m + n)) r))