I have defined the syntax of modal logic in Coq and now I'm having trouble with the semantics. This is how I defined the Kripke model:
Parameter x : Type.
Definition world : Type := x.
Class KripkeModel : Type :=
{
Worlds : world -> Prop;
Access : world -> world -> Prop;
Int : world -> prop_atom -> Prop;
(* Reflexivity & Transitivity *)
Acc_refl (w : world) : Access w w;
Acc_trans (w u v : world) : Access w u -> Access u v -> Access w v;
}.
But now every time I want to check $\mathfrak{M}, w \vDash \phi$, I need a proof for M.(Access) w
first to show that the node is actually in the model. I think there are quite many issues with this definition and I need to change many things, including the definition of my interpretation function.
I'm also having trouble defining canonical models. (I want to prove Completeness)
I have defined a context as follows: Definition Context : Type := list S4_props.
Where S4_Props
is the type of the possible propositions of $S4$. For my canonical model, I need to have contexts as nodes. We also know the accessibility relation is defined via inclusion. I don't know how to define the accessibility relation or the interpretation function of the canonical model with my current definition.