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

tactic: ext 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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
⊢ snoc f a ∘ natAdd m = snoc (f ∘ natAdd m) a
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i : Fin (n + 1)
⊢ (snoc f a ∘ natAdd m) i = snoc (f ∘ natAdd m) a i

tactic: refine Fin.lastCases ?_ (fun i ↦ ?_) 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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i : Fin (n + 1)
⊢ (snoc f a ∘ natAdd m) i = snoc (f ∘ natAdd m) a i
state_after: case h.refine_1
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i : Fin (n + 1)
⊢ (snoc f a ∘ natAdd m) (last n) = snoc (f ∘ natAdd m) a (last n)

case h.refine_2
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i✝ : Fin (n + 1)
i : Fin n
⊢ (snoc f a ∘ natAdd m) i.castSucc = snoc (f ∘ natAdd m) a i.castSucc

tactic: simp only [Function.comp_apply]
state_before: case h.refine_1
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i : Fin (n + 1)
⊢ (snoc f a ∘ natAdd m) (last n) = snoc (f ∘ natAdd m) a (last n)
state_after: case h.refine_1
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i : Fin (n + 1)
⊢ snoc f a (natAdd m (last n)) = snoc (f ∘ natAdd m) a (last n)

tactic: rw [snoc_last, natAdd_last, snoc_last]
state_before: case h.refine_1
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i : Fin (n + 1)
⊢ snoc f a (natAdd m (last n)) = snoc (f ∘ natAdd m) a (last n)
state_after: no goals

tactic: simp only [comp_apply, snoc_castSucc]
state_before: case h.refine_2
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i✝ : Fin (n + 1)
i : Fin n
⊢ (snoc f a ∘ natAdd m) i.castSucc = snoc (f ∘ natAdd m) a i.castSucc
state_after: case h.refine_2
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i✝ : Fin (n + 1)
i : Fin n
⊢ snoc f a (natAdd m i.castSucc) = f (natAdd m i)

tactic: rw [natAdd_castSucc, snoc_castSucc]
state_before: case h.refine_2
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✝)
n m : ℕ
α : Type u_1
f : Fin (m + n) → α
a : α
i✝ : Fin (n + 1)
i : Fin n
⊢ snoc f a (natAdd m i.castSucc) = f (natAdd m i)
state_after: no goals