Module VA <: SEMILATTICE.
Inductive t' := Bot | State (ae: aenv) (am: amem).
Definition t := t'.
Definition eq (x y: t) :=
match x, y with
| Bot, Bot => True
| State ae1 am1, State ae2 am2 =>
AE.eq ae1 ae2 /\ forall bc m, mmatch bc m am1 <-> mmatch bc m am2
| _, _ => False
end.
Definition beq (x y: t) : bool :=
match x, y with
| Bot, Bot => true
| State ae1 am1, State ae2 am2 => AE.beq ae1 ae2 && mbeq am1 am2
| _, _ => false
end.

Lemma beq_correct: forall x y, beq x y = true -> eq x y.