(*+ Predicates *)

Definition pred := map -> Prop.Definition sat (m : map) (P : pred) : Prop := P m.Infix " == " := pequiv (at level 50, no associativity).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.

(* Specifications: *)
Lemma imp_sepcon P Q F : imp P Q -> imp (P ** F) (Q ** F).