Definition covariant {B A : Type} (F: (B -> pred A) -> (B -> pred A)) : Prop :=
forall (P Q: B -> pred A), (forall x, P x |-- Q x) -> (forall x, F P x |-- F Q x).
Definition corec {B A: Type}  (F: (B -> pred A) -> (B -> pred A)) : B -> pred A :=
fun x w => forall P: B -> pred A, (forall x, F P x |-- P x) -> P x w.

Lemma covariant_sepcon {B}{A} {JA: Join A}{PA: Perm_alg A}:
forall P Q : (B -> pred A) -> (B -> pred A),
covariant P -> covariant Q ->
covariant (fun (x : B -> pred A) b => P x b * Q x b)%pred.