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 prop_impl_imp: forall (P Q: Prop),
!! (P -> Q) = !! P --> !! Q.