Local Open Scope pred.
Definition corable {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}
(P: pred A) := forall w, P w = P (core w).

(* Specifications: *)
Lemma corable_spec: forall {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}
(P: pred A),
corable P = forall x y:A, core x = core y -> P x -> P y.
Lemma corable_andp {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}:
forall P Q, corable P -> corable Q -> corable (P && Q).
Lemma corable_orp {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}:
forall P Q, corable P -> corable Q -> corable (P || Q).
Lemma corable_allp {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}:
forall {B: Type} (P:  B -> pred A) ,
(forall b, corable (P b)) -> corable (allp P).
Lemma corable_exp {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}:
forall {B: Type} (P:  B -> pred A) ,
(forall b, corable (P b)) -> corable (exp P).
Lemma corable_prop{A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}:
forall P, corable (prop P).
Lemma corable_imp {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A} :
forall P Q, corable P -> corable Q -> corable (P --> Q).
Lemma corable_sepcon {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}:
forall P Q, corable P -> corable Q -> corable (P * Q).
Lemma corable_wand: forall {A:Type} {JA: Join A} {PA: Perm_alg A} {SaA: Sep_alg A} (P Q: pred A), corable P -> corable Q -> corable (P -* Q).
Lemma corable_andp_sepcon1{A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}:
forall P Q R, corable P ->  (P && Q) * R = P && (Q * R).