Module AVal <: SEMILATTICE_WITH_TOP.
Definition t := aval.
Definition eq (x y: t) := (x = y).
Definition eq_refl: forall x, eq x x := (@eq_refl t).
Definition eq_sym: forall x y, eq x y -> eq y x := (@eq_sym t).
Definition eq_trans: forall x y z, eq x y -> eq y z -> eq x z := (@eq_trans t).
Definition beq (x y: t) : bool := proj_sumbool (eq_aval x y).
Fixpoint einit_regs (rl: list reg) : aenv :=
match rl with
| r1 :: rs => AE.set r1 (Ifptr Nonstack) (einit_regs rs)
| nil => AE.top
end.

Lemma ematch_init:
forall rl vl,
(forall v, In v vl -> vmatch bc v (Ifptr Nonstack)) ->
ematch (init_regs vl rl) (einit_regs rl).