Local Open Scope logic.
Definition lift0 {B} (P: B) : env -> B := fun _ => P.
Definition lift1 {A1 B} (P: A1 -> B) (f1: env -> A1) : env -> B := fun rho => P (f1 rho).
Definition lift2 {A1 A2 B} (P: A1 -> A2 -> B) (f1: env -> A1) (f2: env -> A2):
env -> B := fun rho => P (f1 rho) (f2 rho).
Definition subst' {A} (x: var) (e: env -> adr) (P: env -> A) : env -> A := fun s => subst x (e s) P s.
Definition neq {A} (x y: A) := ~(x=y).
Definition local {A}{NA: NatDed A} (P: env -> Prop) : env -> A := fun s => prop (P s).
Module Type SEMAX_LIFT.
Parameter mpred : Type.
Parameter Nm: NatDed mpred.  Existing Instance Nm.
Parameter Sm: SepLog mpred.  Existing Instance Sm.
Parameter Cm: ClassicalSep mpred.  Existing Instance Cm.
Parameter Im: Indir mpred.  Existing Instance Im.
Parameter Rm: RecIndir mpred.  Existing Instance Rm.
Parameter SIm: SepIndir mpred.  Existing Instance SIm.
Parameter SRm: SepRec mpred.  Existing Instance SRm.
Parameter mapsto: forall (v1 v2: adr), mpred.

(* Specifications: *)
Axiom mapsto_conflict:  forall a b c, mapsto a b  *  mapsto a c |-- FF.
Definition assert := env -> mpred.