Theorem: Fin.cons_snoc_eq_snoc_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 : β
q : Fin n → β
b : β
⊢ cons a (snoc q b) = snoc (cons a q) b
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
⊢ cons a (snoc q b) i = snoc (cons a q) b i
tactic: ext 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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
⊢ cons a (snoc q b) i = snoc (cons a q) b i
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : i = 0
⊢ cons a (snoc q b) i = snoc (cons a q) b i

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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
⊢ cons a (snoc q b) i = snoc (cons a q) b i
tactic: by_cases h : i = 0
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
⊢ cons a (snoc q b) i = snoc (cons a q) b i
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
⊢ cons a (snoc q b) i = snoc (cons a q) b i
tactic: set j := pred i h with ji
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
⊢ cons a (snoc q b) i = snoc (cons a q) b i
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
⊢ cons a (snoc q b) i = snoc (cons a q) b i
tactic: have : i = j.succ := by rw [ji, succ_pred]
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
⊢ cons a (snoc q b) i = snoc (cons a q) b i
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
⊢ snoc q b j = snoc (cons a q) b j.succ
tactic: rw [this, cons_succ]
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
⊢ snoc q b j = snoc (cons a q) b j.succ
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
h' : ↑j < n
⊢ snoc q b j = snoc (cons a q) b j.succ

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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
h' : ¬↑j < n
⊢ snoc q b j = snoc (cons a q) b j.succ
tactic: by_cases h' : j.val < n
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
h' : ¬↑j < n
⊢ snoc q b j = snoc (cons a q) b j.succ
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
h' : ¬↑j < n
⊢ snoc q b (last n) = snoc (cons a q) b (last n.succ)
tactic: rw [eq_last_of_not_lt h', succ_last]
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 : β
q : Fin n → β
b : β
i : Fin (n.succ + 1)
h : ¬i = 0
j : Fin (n + 1) := i.pred h
ji : j = i.pred h
this : i = j.succ
h' : ¬↑j < n
⊢ snoc q b (last n) = snoc (cons a q) b (last n.succ)
state_after: no goals
tactic: simp