Section KripkeSemantic.
Context {venv: Var_env}.
Class Frame : Type := {
Worlds: Type;
access: Worlds -> Worlds -> Prop;
access_refl: forall w, access w w;
access_trans: forall u v w, access u v -> access v w -> access u w
}.
Class Model: Type := {
F: Frame;
eval: Worlds -> Var -> bool;
hereditary: forall w v: Worlds, access w v -> (forall x: Var, eval w x = true -> eval v x = true)
}.
Existing Instance F.
Class KripkeSem : Type := {
M: Model;
Kripke_Sat : Worlds -> Term -> Prop;
satisfy_ind: forall (w: Worlds) (t: Term),
Kripke_Sat w t <->
match t with
| andp t1 t2 => Kripke_Sat w t1 /\ Kripke_Sat w t2
| orp t1 t2 => Kripke_Sat w t1 \/ Kripke_Sat w t2
| impp t1 t2 => forall v, access w v -> Kripke_Sat v t1 -> Kripke_Sat v t2
| falsep => False
| varp x => eval w x = true
end
}.

Lemma Kripke_Sat_mono: forall `{KripkeSem} w v t, access w v -> Kripke_Sat w t -> Kripke_Sat v t.