Set Implicit Arguments.
Definition sepcon_unique1 {X A} `{SepLog A} (P: X -> A): Prop :=
forall x, P x * P x |-- FF.
Definition sepcon_unique2 {X Y A} `{SepLog A} (P: X -> Y -> A): Prop :=
forall x y1 y2, P x y1 * P x y2 |-- FF.
Section IterSepCon.
Context {A : Type}.
Context {B : Type}.
Context {ND : NatDed A}.
Context {SL : SepLog A}.
Context {ClS: ClassicalSep A}.
Context {CoSL: CorableSepLog A}.
Section SingleSepPred.
Context (p : B -> A).
Fixpoint iter_sepcon (l : list B) : A :=
match l with
| nil => emp
| x :: xl => p x * iter_sepcon xl
end.

Lemma iter_sepcon_emp: forall (l l' : list B), (forall x, p x |-- emp) -> NoDup l' -> incl l' l -> iter_sepcon l |-- iter_sepcon l'.