Module NA <: SEMILATTICE.
Definition t := (nenv * nmem)%type.
Definition eq (x y: t) :=
NE.eq (fst x) (fst y) /\
(forall ge sp b ofs, nlive ge sp (snd x) b ofs <-> nlive ge sp (snd y) b ofs).
Definition beq (x y: t) : bool :=
NE.beq (fst x) (fst y) && nmem_beq (snd x) (snd y).
Definition ge (x y: t) : Prop :=
NE.ge (fst x) (fst y) /\
(forall ge sp b ofs, nlive ge sp (snd y) b ofs -> nlive ge sp (snd x) b ofs).
Definition bot : t := (NE.bot, NMemDead).
Definition lub (x y: t) : t :=
(NE.lub (fst x) (fst y), nmem_lub (snd x) (snd y)).

Lemma ge_lub_left: forall x y, ge (lub x y) x.
Lemma ge_lub_right: forall x y, ge (lub x y) y.