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.
Fixpoint eforget (rl: list reg) (ae: aenv) {struct rl} : aenv :=
match rl with
| nil => ae
| r1 :: rs => eforget rs (AE.set r1 Vtop ae)
end.
End MATCHENV.

Lemma ematch_incr:
forall bc bc' e ae, ematch bc e ae -> bc_incr bc bc' -> ematch bc' e ae.