Local Open Scope kripke_model.
Module StrongSemantics.
Definition sepcon {worlds: Type} {R: Relation worlds} {J: Join worlds} (X: Ensemble worlds) (Y: Ensemble worlds): Ensemble worlds :=
fun m => exists m0 m1 m2, m0 <= m /\ join m1 m2 m0 /\ X m1 /\ Y m2.
Definition wand {worlds: Type} {R: Relation worlds} {J: Join worlds} (X: Ensemble worlds) (Y: Ensemble worlds): Ensemble worlds :=
fun m => forall m0 m1 m2, m <= m0 -> join m0 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}:
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}:
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}:
upwards_closed_Kdenote emp.