Local Open Scope logic_base.
Local Open Scope syntax.
Local Open Scope kripke_model.
(* TODO: It is so obvious that this file is very similar with Trivial.v. The should be merged. The obstacle is the way that we formalize Kripke Semantics. See the "TODO" in GeneralLogic/Semantics/Kripke.v *)
Module Semantics.
Definition andp {worlds: Type} (X: Ensemble worlds) (Y: Ensemble worlds): Ensemble worlds :=
fun m => X m /\ Y m.
Definition orp {worlds: Type} (X: Ensemble worlds) (Y: Ensemble worlds): Ensemble worlds :=
fun m => X m \/ Y m.
Definition falsep {worlds: Type}: Ensemble worlds := fun m => False.

(* Specifications: *)
Lemma andp_closed {worlds: Type} {R: Relation worlds} {po_R: PreOrder Krelation}:
forall (X: Ensemble worlds) (Y: Ensemble worlds),
upwards_closed_Kdenote X ->
upwards_closed_Kdenote Y ->
upwards_closed_Kdenote (andp X Y).
Lemma orp_closed {worlds: Type} {R: Relation worlds} {po_R: PreOrder Krelation}:
forall (X: Ensemble worlds) (Y: Ensemble worlds),
upwards_closed_Kdenote X ->
upwards_closed_Kdenote Y ->
upwards_closed_Kdenote (orp X Y).
Lemma falsep_closed {worlds: Type} {R: Relation worlds}:
upwards_closed_Kdenote falsep.