blob: a8c0f4874a6b351e45a3569ba4d32368dab02e20 [file] [edit]
theorem Nat.lt_of_lt_le {x y z : Nat} : x < y → y ≤ z → x < z := by
intro h h'
induction h'
assumption
apply Nat.le_step
assumption
structure ArrayBuffer (α) where
cap : Nat
backing : Fin cap → Option α
size : Nat
h_size : size ≤ cap
h_full : ∀ i, (h:i < size) → (backing ⟨i, Nat.lt_of_lt_le h h_size⟩).isSome
namespace ArrayBuffer
def grow : ArrayBuffer α → ArrayBuffer α :=
λ ⟨cap, backing, size, h_size, h_full⟩ =>
⟨cap + cap,
λ i => if h:i < cap then backing ⟨i,h⟩ else none,
size,
Nat.le_trans h_size (Nat.le_add_left _ _),
by intro i h
simp
trace_state
have : i < cap := Nat.lt_of_lt_le h h_size
simp [*]⟩