blob: 6f47597e18c9e1bd37152a2cbd257c4402f71dbe [file] [edit]
inductive Vector' (α : Type u): Nat → Type u where
| nil : Vector' α 0
| cons (head : α) (tail : Vector' α n) : Vector' α (n+1)
namespace Vector'
def nth : ∀{n}, Vector' α n → Fin n → α
| n+1, cons x xs, ⟨ 0, _⟩ => x
| n+1, cons x xs, ⟨k+1, h⟩ => xs.nth ⟨k, sorry⟩
def snoc : ∀{n : Nat} (xs : Vector' α n) (x : α), Vector' α (n+1)
| _, nil, x' => cons x' nil
| _, cons x xs, x' => cons x (snoc xs x')
theorem nth_snoc_eq (k: Fin (n+1))(v : Vector' α n)
(h: k.val = n):
(v.snoc x).nth k = x := by
cases k; rename_i k hk
induction v generalizing k <;> subst h
· simp only [nth, snoc]
· simp! [*, nth]
theorem nth_snoc_eq_works (k: Fin (n+1))(v : Vector' α n)
(h: k.val = n):
(v.snoc x).nth k = x := by
cases k; rename_i k hk
induction v generalizing k <;> subst h
· simp only [nth, snoc]
· simp [*, nth, snoc]
end Vector'