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_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_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).