Section IterPredSepCon.
Context {A : Type}.
Context {B : Type}.
Context {ND : NatDed A}.
Context {SL : SepLog A}.
Context {ClS: ClassicalSep A}.
Definition pred_sepcon (p: B -> A) (P: B -> Prop): A :=
EX l: list B, !! (forall x, In x l <-> P x) && !! NoDup l && iter_sepcon p l.
Instance pred_sepcon_proper: Proper (pointwise_relation B eq ==> pointwise_relation B iff ==> eq) pred_sepcon.
(* Lemma pred_sepcon_sepcon: forall (P Q R: B -> Prop) p, Prop_join P Q R -> pred_sepcon P p * pred_sepcon Q p = pred_sepcon R p.  Lemma pred_sepcon_sepcon1: forall (P P': B -> Prop) p x0, (forall x, P' x <-> P x \/ x = x0) -> ~ P x0 -> pred_sepcon P' p = pred_sepcon P p * p x0. *)

(* Lemma pred_sepcon_prop_true_weak: forall (P Q: B -> Prop) (qdec: forall x, Decidable (Q x)) p, (forall x, Q x -> P x) -> pred_sepcon P p |-- pred_sepcon Q p * TT. *)
Lemma pred_sepcon_False: forall p,
pred_sepcon p (fun _ => False) = emp.