(*+ Predicates *)
Definition sat (m : map) (P : pred) : Prop := P m.
(* Definition sat (m : map) (P : pred) : Prop := forall n, eqmap m n -> P n. *)
Infix " |= " := sat (at level 40).
Definition emp : pred := fun m => forall n, m n = None.
Definition TT : pred := fun m => True.
Definition FF : pred := fun m => False.
Definition imp (P Q : pred) : Prop := forall m, m |= P -> m |= Q.
Definition sepcon (P Q : pred) : pred :=
fun m => exists m1 m2, join m1 m2 m /\ P m1 /\ Q m2.
Infix "**" := sepcon (at level 30).

(* Specifications: *)
Lemma imp_sepcon P Q F : imp P Q -> imp (P ** F) (Q ** F).
Definition pequiv (P Q : pred) := forall m, P m <-> Q m.
Lemma imp_sepcon P Q F : imp P Q -> imp (P ** F) (Q ** F).
Definition pequiv (P Q : pred) := forall m, P m <-> Q m.