End COMBINE.
Definition lub (x y: t) : t :=
combine
(fun a b =>
match a, b with
| Some u, Some v => Some (L.lub u v)
| None, _ => b
| _, None => a
end)
x y.

(* Specifications: *)
Lemma gcombine_bot:
forall f t1 t2 p,
f None None = None ->
L.eq (get p (combine f t1 t2))
(match f t1!p t2!p with Some x => x | None => L.bot end).
Lemma ge_lub_left:
forall x y, ge (lub x y) x.
Lemma ge_lub_right:
forall x y, ge (lub x y) y.
Lemma gcombine_bot:
forall f t1 t2 p,
f None None = None ->
L.eq (get p (combine f t1 t2))
(match f t1!p t2!p with Some x => x | None => L.bot end).
Lemma ge_lub_left:
forall x y, ge (lub x y) x.
Lemma ge_lub_right:
forall x y, ge (lub x y) y.