| 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 [*]⟩ |