Definition superprecise {A}  {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A} (P: pred A) :=
   forall w1 w2, P w1 -> P w2 -> comparable w1 w2 -> w1=w2.

(* Specifications: *)
Lemma modus_ewand {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A} : forall P Q, superprecise P -> P * (ewand P Q) |-- Q.
Lemma exists_expand_sepcon {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}: forall B (p: B -> pred A) q, (exp p * q)%pred = (exp (fun x => p x * q))%pred.
Lemma exists_expand_sepcon' {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}: forall B p (q: B -> pred A), (p * exp q)%pred = (exp (fun x => p * q x))%pred.
Lemma exists_expand_and {A} {JA: Join A}: forall B (p: B -> pred A) q, (exp p && q)%pred = (exp (fun x => p x && q))%pred.
Lemma exists_expand_and' {A} {JA: Join A}: forall B p (q: B -> pred A), (p && exp q)%pred = (exp (fun x => p && q x))%pred.
Lemma allp_derives_right {A} : forall B p (q: B -> pred A), ((p |-- allp q) <-> (forall x, p |-- q x)).
Lemma distrib_sepcon_andp {A} {JA: Join A}{PA: Perm_alg A}: forall P Q R, P * (Q && R) |-- (P * Q) && (P * R).
Lemma andp_r {A: Type} : forall (P Q R: pred A), P |-- Q -> P |-- R -> P |-- Q && R.