Require Import mathcomp.ssreflect.ssreflect.
Require Import CTL_def.

Set Implicit Arguments.
Import Prenex Implicits.

Hilbert System for CTL


Module IC.
Section Hilbert.

  Inductive prv : form -> Prop :=
  | rMP s t : prv (s ---> t) -> prv s -> prv t
  | axK s t : prv (s ---> t ---> s)
  | axS s t u : prv ((u ---> s ---> t) ---> (u ---> s) ---> u ---> t)
  | axDN s : prv (((s ---> fF) ---> fF) ---> s)
  | rNec s : prv s -> prv (fAX s)
  | axN s t : prv (fAX (s ---> t) ---> fAX s ---> fAX t)

  | AU_ind s t u : prv (t ---> u) -> prv (s ---> fAX u ---> u) -> prv ((fAU s t) ---> u)
  | axAUI s t : prv (t ---> fAU s t)
  | axAUf s t : prv (s ---> fAX (fAU s t) ---> fAU s t)

  | rAR_ind s t u :
      prv (u ---> t) -> prv (u ---> (s ---> fF) ---> fAX u) -> prv (u ---> fAR s t)
  | axARE s t : prv (fAR s t ---> t)
  | axARu s t : prv (fAR s t ---> (s ---> fF) ---> fAX (fAR s t))

  | ax_serial : prv (fAX fF ---> fF).

The hilbert system for CTL can be seen as the composition of Hilbert systems for minimal logic (M), classical propositional logic (P), basic modal logic (K) and the rules and axioms specific to CTL

  Canonical Structure prv_mSystem := MSystem rMP axK axS.
  Canonical Structure prv_pSystem := PSystem axDN.
  Canonical Structure prv_kSystem := KSystem rNec axN.
  Canonical Structure prv_ctlSystem := CTLSystem AU_ind axAUI axAUf rAR_ind axARE axARu.

  Canonical Structure form_slpType := @SLPType prv_pSystem form_slClass.

Soundness


  Lemma soundness s : prv s -> forall (M:cmodel) (w:M), eval s w.

  Lemma box_request (C : clause) : prv ([af C] ---> AX [af R C]).

End Hilbert.
End IC.