End Semantics.
Module SemanticsMono.
Program Definition andp {worlds: Type} {R: Relation worlds} {po_R: PreOrder Krelation} (X Y: MonoEnsemble worlds): MonoEnsemble worlds :=
Semantics.andp X Y.
Next Obligation.
apply (@Semantics.andp_closed worlds R po_R);
apply (proj2_sig _).
Defined.
Program Definition orp {worlds: Type} {R: Relation worlds} {po_R: PreOrder Krelation} (X Y: MonoEnsemble worlds): MonoEnsemble worlds :=
Semantics.orp X Y.
Next Obligation.
apply (@Semantics.orp_closed worlds R po_R);
apply (proj2_sig _).
Defined.
Program Definition falsep {worlds: Type} {R: Relation worlds}: MonoEnsemble worlds :=
Semantics.falsep.
Next Obligation.
apply (@Semantics.falsep_closed worlds R);
apply (proj2_sig _).
Defined.
End SemanticsMono.
Class KripkePropositionalSemantics (L: Language) {minL: MinimunLanguage L} {pL: PropositionalLanguage L} (MD: Model) {kMD: KripkeModel MD} (M: Kmodel) {R: Relation (Kworlds M)} (SM: Semantics L MD) {kminSM: KripkeMinimunSemantics L MD M SM}: Type := {
denote_andp: forall x y, Same_set _ (Kdenotation M (x && y)) (Semantics.andp (Kdenotation M x) (Kdenotation M y));
denote_orp: forall x y, Same_set _ (Kdenotation M (x || y)) (Semantics.orp (Kdenotation M x) (Kdenotation M y));
denote_falsep: Same_set _ (Kdenotation M FF) Semantics.falsep
}.
Section KripkeSemantics.
Context {L: Language}
{minL: MinimunLanguage L}
{pL: PropositionalLanguage L}
{MD: Model}
{kMD: KripkeModel MD}
{M: Kmodel}
{R: Relation (Kworlds M)}
{SM: Semantics L MD}
{kminSM: KripkeMinimunSemantics L MD M SM}
{kpSM: KripkePropositionalSemantics L MD M SM}.

Lemma sat_andp: forall m x y, KRIPKE: M , m |= x && y <-> (KRIPKE: M , m |= x /\ KRIPKE: M , m |= y).