lean4-htt/tests/lean/run/james1.lean
2022-05-03 17:46:50 -07:00

39 lines
1,014 B
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

inductive LazyList (α : Type u)
| nil : LazyList α
| cons (hd : α) (tl : LazyList α) : LazyList α
| delayed (t : Thunk (LazyList α)) : LazyList α
namespace LazyList
def force : LazyList α → Option (α × LazyList α)
| delayed as => force as.get
| nil => none
| cons a as => some (a,as)
def length : LazyList α → Nat
| nil => 0
| cons _ as => length as + 1
| delayed as => length as.get
theorem F_force_some_len_minus_one {L L' : LazyList α}
: L.force = some (a, L') → L'.length = L.length - 1
:= sorry
end LazyList
structure LazyBatchQueue (τ) :=
F : LazyList τ
F_len : Nat
h_lens : F.length = F_len
def deq (Q : LazyBatchQueue τ) : Option (τ × LazyBatchQueue τ) :=
match h:Q.F.force with
| some (x, F') =>
some (x,
⟨F', Q.F_len - 1,
by simp [LazyList.F_force_some_len_minus_one h, Q.h_lens]⟩)
| none => none
theorem deq_correct (Q : LazyBatchQueue τ) : deq Q = none ↔ Q.F.force = none := by
simp [deq]
split <;> simp [*]