Local Open Scope kripke_model.
Module WeakSemantics.
Definition sepcon {worlds: Type} {J: Join worlds} (X: Ensemble worlds) (Y: Ensemble worlds): Ensemble worlds :=
fun m => exists m1 m2, join m1 m2 m /\ X m1 /\ Y m2.
Definition wand {worlds: Type} {J: Join worlds} (X: Ensemble worlds) (Y: Ensemble worlds): Ensemble worlds :=
fun m => forall m1 m2, join m m1 m2 -> X m1 -> Y m2.
Definition emp {worlds: Type} {R: Relation worlds} {J: Join worlds}: Ensemble worlds := increasing.

(* Specifications: *)
Lemma sepcon_closed
{worlds: Type}
{R: Relation worlds}
{po_R: PreOrder Krelation}
{J: Join worlds}
{SA: SeparationAlgebra worlds}
{uSA: UpwardsClosedSeparationAlgebra worlds}:
forall (X: Ensemble worlds) (Y: Ensemble worlds),
upwards_closed_Kdenote X ->
upwards_closed_Kdenote Y ->
upwards_closed_Kdenote (sepcon X Y).
Lemma wand_closed
{worlds: Type}
{R: Relation worlds}
{po_R: PreOrder Krelation}
{J: Join worlds}
{SA: SeparationAlgebra worlds}
{dSA: DownwardsClosedSeparationAlgebra worlds}:
forall (X: Ensemble worlds) (Y: Ensemble worlds),
upwards_closed_Kdenote X ->
upwards_closed_Kdenote Y ->
upwards_closed_Kdenote (wand X Y).
Lemma emp_closed
{worlds: Type}
{R: Relation worlds}
{po_R: PreOrder Krelation}
{J: Join worlds}
{SA: SeparationAlgebra worlds}
{dSA: DownwardsClosedSeparationAlgebra worlds}:
upwards_closed_Kdenote emp.