Require Import mathcomp.ssreflect.ssreflect.
Require Import CTL_def gen_def hilbert hilbert_hist.
Import IC.

Set Implicit Arguments.
Import Prenex Implicits.

Translation from Gentzen derivations to Hilbert Refutations


Definition hist (H : {fset clause}) := \and_(C <- H) ~~: [af C].

Lemma histU C (H : {fset clause}) :
  prv (hist (C |` H) <--> ~~: [af C] :/\: hist H).

Definition interp_a A :=
  match A with
    | aVoid => Top
    | aAU (s, t, H) => AU (s :/\: hist H) (t :/\: hist H)
    | aAXU (s, t, H) => AX (AU (s :/\: hist H) (t :/\: hist H))
    | aAR (s, t, H) => EU (~~:s :/\: hist H) (~~: t :/\: hist H)
    | aAXR (s, t, H) => EX (EU (~~:s :/\: hist H) (~~: t :/\: hist H))
  end.

Lemma annot_request E : prv (interp_a E ---> AX (interp_a (aR E))).

Lemma hist0 s : prv (s ---> s :/\: hist fset0).

Lemma hilbert_soundness A : gen A -> prv ([af A.1] ---> interp_a A.2 ---> Bot).

Lemma plain_soundness C : gen (C,aVoid) -> prv (~~: [af C]).