Require Import mathcomp.ssreflect.ssreflect.
Require Import modular_hilbert CTL_def hilbert.
Set Implicit Arguments.
Import Prenex Implicits.
Require Import modular_hilbert CTL_def hilbert.
Set Implicit Arguments.
Import Prenex Implicits.
Emerson's Axiomatization
The defined logical operations are only available once the respective
records (pSystem etc.) have been declared. Hence we introduce local notations
and later restate some of the axioms and rules using the defined notations from
modular_hilbert.v
Definition fEX s := (~~: fAX (~~: s)).
Definition fEU s t := (~~: fAR (~~: s) (~~: t)).
Definition fAG s := fAR fF s.
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)
| rGen s : prv s -> prv (fAG s)
| axEXD' s t : prv (fEX (s :\/: t) <--> fEX s :\/: fEX t)
| axReg' s t : prv (fAG (s ---> t) ---> fEX s ---> fEX t)
| axSer' : prv (fEX (fF ---> fF))
| axAXT : prv (fAX (fF ---> fF))
| axEUeq' s t : prv (fEU s t <--> t :\/: (s :/\: fEX (fEU s t)))
| axAUeq' s t : prv (fAU s t <--> t :\/: (s :/\: fAX (fAU s t)))
| axAUr' s t u : prv (fAG (u ---> ~~:t :/\: fEX u) ---> u ---> ~~: fAU s t)
| axEUr' s t u : prv (fAG (u ---> ~~:t :/\: (s ---> fAX u)) ---> u ---> ~~: fEU s t)
| axAXdef' s : prv (fAX s <--> ~~: fEX (~~: s))
| axARdef' s t : prv (fAR s t <--> ~~: fEU (~~: s) (~~: t))
.
End Hilbert.
Completeness
Canonical Structure prv_mSystem := MSystem rMP axK axS.
Canonical Structure prv_pSystem := PSystem axDN.
Lemma axAXdef s : prv (fAX s <--> ~~: fEX (~~: s)).
Lemma axEXD s t : prv (fEX (s :\/: t) <--> fEX s :\/: fEX t).
Lemma axReg s t : prv (fAG (s ---> t) ---> fEX s ---> fEX t).
Lemma rRegEX s t : prv (s ---> t) -> prv (fEX s ---> fEX t).
Lemma rRegAX s t : prv (s ---> t) -> prv (fAX s ---> fAX t).
Lemma rNec s : prv s -> prv (fAX s).
Lemma axABBA s t : prv (fAX s :/\: fAX t ---> fAX (s :/\: t)).
Lemma axN s t : prv (fAX (s ---> t) ---> fAX s ---> fAX t).
Canonical Structure prv_kSystem := KSystem rNec axN.
Lemma axSer : prv (fEX Top).
Lemma axEUeq s t : prv (fEU s t <--> t :\/: (s :/\: fEX (fEU s t))).
Lemma axAUeq s t : prv (fAU s t <--> t :\/: (s :/\: fAX (fAU s t))).
Lemma axAUr s t u : prv (fAG (u ---> ~~:t :/\: fEX u) ---> u ---> ~~: fAU s t).
Lemma axEUr s t u : prv (fAG (u ---> ~~:t :/\: (s ---> fAX u)) ---> u ---> ~~: fEU s t).
Lemma axARdef s t : prv (fAR s t <--> ~~: fEU (~~: s) (~~: t)).
Admissibility of the induction rules
Lemma AR_ind s t u : prv (u ---> t) -> prv (u ---> (s ---> fF) ---> fAX u) -> prv (u ---> fAR s t).
Lemma AU_ind_aux s t u : prv (t ---> u) -> prv (fAX u ---> u) -> prv ((fAU s t) ---> u).
Lemma AU_ind s t u : prv (t ---> u) -> prv (s ---> fAX u ---> u) -> prv ((fAU s t) ---> u).
Introducion/Inversion Rules
Lemma ax_serial : prv (fAX fF ---> fF).
Lemma axAUI s t : prv (t ---> fAU s t).
Lemma axAUf s t : prv (s ---> fAX (fAU s t) ---> fAU s t).
Lemma axARE s t : prv (fAR s t ---> t).
Lemma axARu s t : prv (fAR s t ---> (s ---> fF) ---> fAX (fAR s t)).
End Eme90.
Theorem Eme90_translation s : IC.prv s -> Eme90.prv s.
Soundness
Import IC.
Lemma rGen s : prv s -> prv (AR Bot s).
Lemma axEXAXI s t : prv (EX s ---> AX (s ---> t) ---> EX t).
Lemma axAUr (s t u : form) : prv (AR Bot (u ---> ~~:t :/\: EX u) ---> u ---> ~~: AU s t).
Lemma axEUr s t u : prv (AR Bot (u ---> ~~:t :/\: (s ---> fAX u)) ---> u ---> ~~: EU s t).
Lemma axEUeq (s t : form) : prv (EU s t <--> t :\/: s :/\: EX (EU s t)).
Lemma axAUeq (s t : form) : prv (AU s t <--> t :\/: s :/\: AX (AU s t)).
Lemma axEXD s t : prv (EX (s :\/: t) <--> EX s :\/: EX t).
Lemma axReg s t : prv (AR Bot (s ---> t) ---> EX s ---> EX t).
Lemma axAXdef s : prv (AX s <--> ~~: EX (~~: s)).
Lemma axARdef s t : prv (fAR s t <--> ~~: EU (~~: s) (~~: t)).
Lemma axSer : prv (EX (fF ---> fF)).
Lemma axAXT : prv (AX (fF ---> fF)).
Theorem Eme90_sound s : Eme90.prv s -> prv s.
Lemma rGen s : prv s -> prv (AR Bot s).
Lemma axEXAXI s t : prv (EX s ---> AX (s ---> t) ---> EX t).
Lemma axAUr (s t u : form) : prv (AR Bot (u ---> ~~:t :/\: EX u) ---> u ---> ~~: AU s t).
Lemma axEUr s t u : prv (AR Bot (u ---> ~~:t :/\: (s ---> fAX u)) ---> u ---> ~~: EU s t).
Lemma axEUeq (s t : form) : prv (EU s t <--> t :\/: s :/\: EX (EU s t)).
Lemma axAUeq (s t : form) : prv (AU s t <--> t :\/: s :/\: AX (AU s t)).
Lemma axEXD s t : prv (EX (s :\/: t) <--> EX s :\/: EX t).
Lemma axReg s t : prv (AR Bot (s ---> t) ---> EX s ---> EX t).
Lemma axAXdef s : prv (AX s <--> ~~: EX (~~: s)).
Lemma axARdef s t : prv (fAR s t <--> ~~: EU (~~: s) (~~: t)).
Lemma axSer : prv (EX (fF ---> fF)).
Lemma axAXT : prv (AX (fF ---> fF)).
Theorem Eme90_sound s : Eme90.prv s -> prv s.