Definition eq (x y: t) : Prop :=
forall p, L.eq (get p x) (get p y).

(* Specifications: *)
Lemma eq_refl: forall x, eq x x.
Lemma eq_sym: forall x y, eq x y -> eq y x.
Lemma eq_trans: forall x y z, eq x y -> eq y z -> eq x z.
Definition beq (x y: t) : bool := PTree.beq L.beq x y.
Lemma beq_correct: forall x y, beq x y = true -> eq x y.
Definition ge (x y: t) : Prop :=
forall p, L.ge (get p x) (get p y).
Lemma ge_refl: forall x y, eq x y -> ge x y.
Lemma ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
Definition bot : t := PTree.empty _.
Lemma get_bot: forall p, get p bot = L.bot.
Lemma ge_bot: forall x, ge x bot.
Section COMBINE.
Lemma eq_refl: forall x, eq x x.
Lemma eq_sym: forall x y, eq x y -> eq y x.
Lemma eq_trans: forall x y z, eq x y -> eq y z -> eq x z.
Definition beq (x y: t) : bool :=
match x, y with
| Bot, Bot => true
| Top_except m, Top_except n => PTree.beq L.beq m n
| _, _ => false
end.
Lemma beq_correct: forall x y, beq x y = true -> eq x y.
Definition ge (x y: t) : Prop :=
forall p, L.ge (get p x) (get p y).
Lemma ge_refl: forall x y, eq x y -> ge x y.
Lemma ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
Definition bot := Bot.
Lemma get_bot: forall p, get p bot = L.bot.
Lemma ge_bot: forall x, ge x bot.
Definition top := Top_except (PTree.empty L.t).
Lemma get_top: forall p, get p top = L.top.
Lemma ge_top: forall x, ge top x.
Module LM := LPMap1(L).