Require Import ssreflect ssrfun ssrbool eqtype ssrnat seq.
Require Import choice fintype finfun finset path fingraph bigop.
Require Import edone bcase fset.
Require Import base.
Require Import CTL_def tab_def.
Set Implicit Arguments.
Import Prenex Implicits.
Hint Constructors tab.
Require Import choice fintype finfun finset path fingraph bigop.
Require Import edone bcase fset.
Require Import base.
Require Import CTL_def tab_def.
Set Implicit Arguments.
Import Prenex Implicits.
Hint Constructors tab.
Decidability of Tableau Derivability
Part 1: Syntactic Universe
Section tab_closure.
Variable F : {fset sform}.
Hypothesis sfc_F : sf_closed F.
Lemma sf_AU s t b : ((fAU s t,b) \in F) = ((fAX (fAU s t),b) \in F).
Lemma sf_AR s t b : ((fAR s t,b) \in F) = ((fAX (fAR s t),b) \in F).
Definition Cs := powerset F.
Definition Hs := powerset Cs.
Definition AUs := [fset p in positives F `x` positives F | fAU p.1 p.2^+ \in F].
Definition ARs := [fset p in negatives F `x` negatives F | fAR p.1 p.2^- \in F].
Definition As :=
aVoid |` [fset aAU (p,H) | p <- AUs, H <-Hs ]
`|` [fset aAXU (p,H) | p <- AUs, H <-Hs ]
`|` [fset aAR (p,H) | p <- ARs, H <-Hs ]
`|` [fset aAXR (p,H) | p <- ARs, H <-Hs ].
Definition U : {fset clause * annot} := Cs `x` As.
Lemma AsX p H : (aAU (p, H) \in As) = (aAXU (p, H) \in As).
Lemma AsAU s t H : aAU (s,t,H) \in As = [&& fAU s t^+ \in F & H \in Hs].
Lemma AsAXU s t H : aAXU (s,t,H) \in As = [&& fAX (fAU s t)^+ \in F & H \in Hs].
Lemma AsX' p H : (aAR (p, H) \in As) = (aAXR (p, H) \in As).
Lemma AsAR s t H : aAR (s,t,H) \in As = [&& fAR s t^- \in F & H \in Hs].
Lemma AsAXR s t H : aAXR (s,t,H) \in As = [&& fAX (fAR s t)^- \in F & H \in Hs].
Lemma AsV : aVoid \in As.
Lemma AU_shift s t C H : (fAU s t^+ |` C \in Cs) && (H \in Hs) = ((C,aAU (s,t,H)) \in U).
Lemma AXU_shift s t C H : (fAX (fAU s t)^+ |` C \in Cs) && (H \in Hs) = ((C,aAXU (s,t,H)) \in U).
Lemma AR_shift s t C H : (fAR s t^- |` C \in Cs) && (H \in Hs) = ((C,aAR (s,t,H)) \in U).
Lemma AXR_shift s t C H : (fAX (fAR s t)^- |` C \in Cs) && (H \in Hs) = ((C,aAXR (s,t,H)) \in U).
Variable F : {fset sform}.
Hypothesis sfc_F : sf_closed F.
Lemma sf_AU s t b : ((fAU s t,b) \in F) = ((fAX (fAU s t),b) \in F).
Lemma sf_AR s t b : ((fAR s t,b) \in F) = ((fAX (fAR s t),b) \in F).
Definition Cs := powerset F.
Definition Hs := powerset Cs.
Definition AUs := [fset p in positives F `x` positives F | fAU p.1 p.2^+ \in F].
Definition ARs := [fset p in negatives F `x` negatives F | fAR p.1 p.2^- \in F].
Definition As :=
aVoid |` [fset aAU (p,H) | p <- AUs, H <-Hs ]
`|` [fset aAXU (p,H) | p <- AUs, H <-Hs ]
`|` [fset aAR (p,H) | p <- ARs, H <-Hs ]
`|` [fset aAXR (p,H) | p <- ARs, H <-Hs ].
Definition U : {fset clause * annot} := Cs `x` As.
Lemma AsX p H : (aAU (p, H) \in As) = (aAXU (p, H) \in As).
Lemma AsAU s t H : aAU (s,t,H) \in As = [&& fAU s t^+ \in F & H \in Hs].
Lemma AsAXU s t H : aAXU (s,t,H) \in As = [&& fAX (fAU s t)^+ \in F & H \in Hs].
Lemma AsX' p H : (aAR (p, H) \in As) = (aAXR (p, H) \in As).
Lemma AsAR s t H : aAR (s,t,H) \in As = [&& fAR s t^- \in F & H \in Hs].
Lemma AsAXR s t H : aAXR (s,t,H) \in As = [&& fAX (fAR s t)^- \in F & H \in Hs].
Lemma AsV : aVoid \in As.
Lemma AU_shift s t C H : (fAU s t^+ |` C \in Cs) && (H \in Hs) = ((C,aAU (s,t,H)) \in U).
Lemma AXU_shift s t C H : (fAX (fAU s t)^+ |` C \in Cs) && (H \in Hs) = ((C,aAXU (s,t,H)) \in U).
Lemma AR_shift s t C H : (fAR s t^- |` C \in Cs) && (H \in Hs) = ((C,aAR (s,t,H)) \in U).
Lemma AXR_shift s t C H : (fAX (fAR s t)^- |` C \in Cs) && (H \in Hs) = ((C,aAXR (s,t,H)) \in U).
U is closed under backward application of tableau rules
Lemma subCs s C : s |` C \in Cs -> s \in F.
Lemma subU t X C A :
(sf_closed' F t -> X `<=` F) -> (t |` C,A) \in U -> (X `|` C,A) \in U.
Lemma RinU (C : clause) : C \in Cs -> R C \in Cs.
Lemma tabU_ipl s t C E : (fImp s t^+ |` C, E) \in U -> (s^- |` C, E) \in U.
Lemma tabU_ipr s t C E : (fImp s t^+ |` C, E) \in U -> (t^+ |` C, E) \in U.
Lemma tabU_in s t C E : (fImp s t^- |` C, E) \in U -> ([fset s^+ , t^- & C], E) \in U.
Lemma tabU_aR E : E \in As -> aR E \in As.
Lemma tabU_AXn s C E : (fAX s^- |` C , E) \in U -> (s^- |` R C, aR E) \in U.
Lemma tabU_AUpl s t C E : (fAU s t^+ |` C,E) \in U -> (t^+ |` C,E) \in U.
Lemma tabU_AUpr s t C E : (fAU s t^+ |` C,E) \in U -> ([fset s^+, fAX (fAU s t)^+ & C],E) \in U.
Lemma tabU_AUnl s t C E : (fAU s t^- |` C, E) \in U -> ([fset s^-, t^- & C], E) \in U.
Lemma tabU_AUnr s t C E : (fAU s t^- |` C, E) \in U -> ([fset t^-, fAX (fAU s t)^- & C],E) \in U.
Lemma tabU_foc s t C : (fAU s t^+ |` C , aVoid) \in U -> (C,aAU (s, t, fset0)) \in U.
Lemma tabU_AUhl s t H C : (C, aAU (s, t, H)) \in U -> (t^+ |` C, aVoid) \in U.
Lemma tabU_AUhr s t H C : (C, aAU (s, t, H)) \in U -> (s^+ |` C, aAXU (s, t, C |` H)) \in U.
Lemma tabU_jmp C E : (C,E) \in U -> (R C, aR E) \in U.
Lemma pr_inCs A : A \in U -> pr A \in Cs.
Lemma tabU_ufoc A : A \in U -> (pr A, aVoid) \in U.
Lemma tabU_ARpl s t C E : (fAR s t^+ |` C,E) \in U -> ([fset s^+, t^+ & C],E) \in U.
Lemma tabU_ARpr s t C E : (fAR s t^+ |` C,E) \in U -> ([fset t^+, fAX (fAR s t)^+ & C],E) \in U.
Lemma tabU_ARnl s t C E : (fAR s t^- |` C,E) \in U -> (t^- |` C,E) \in U.
Lemma tabU_ARnr s t C E : (fAR s t^- |` C,E) \in U -> ([fset s^-, fAX (fAR s t)^- & C],E) \in U.
Lemma tabU_ARhl s t H C : (C, aAR (s, t, H)) \in U -> (t^- |` C, aVoid) \in U.
Lemma tabU_ARhr s t H C : (C, aAR (s, t, H)) \in U -> (s^- |` C, aAXR (s, t, C |` H)) \in U.
Lemma tabU_foc' s t C : (fAR s t^- |` C, aVoid) \in U -> (C, aAR (s, t, fset0)) \in U.
Lemma tabU_aAXR s t H C : (C, aAXR (s, t, H)) \in U -> (R C, aAR (s, t, H)) \in U.
Hint Resolve tabU_ipl tabU_ipr tabU_in tabU_AXn tabU_AUpl tabU_AUpr tabU_AUnl tabU_AUnr tabU_AUhl tabU_AUhr tabU_foc tabU_jmp.
Definition step_plain_cases (D : {fset clause * annot}) (C : clause) s E :=
match s with
| fF^+ => true
| fV p^+ => fV p^- \in C
| (fImp t1 t2)^+ => ((t1^- |` C,E) \in D) && ((t2^+ |` C,E) \in D)
| (fImp t1 t2)^- => ([fset t1^+, t2^- & C],E) \in D
| fAX s^- => (s^- |` R C,aR E) \in D
| fAU s t^+ => ((t^+ |` C,E) \in D) && (([fset s^+, fAX (fAU s t)^+ & C],E) \in D)
| fAU s t^- => (([fset s^-, t^- & C], E) \in D) && (([fset t^-, fAX (fAU s t)^- & C],E) \in D)
| fAR s t^+ => (([fset s^+, t^+ & C], E) \in D) && (([fset t^+, fAX (fAR s t)^+ & C],E) \in D)
| fAR s t^- => ((t^- |` C,E) \in D) && (([fset s^-, fAX (fAR s t)^- & C],E) \in D)
| _ => false
end.
Definition step_plain (D : {fset clause * annot}) (A : clause * annot) :=
[some s in F, [some C in Cs, [some E in As, (A == (s |` C, E)) && step_plain_cases D C s E]]].
Definition step_annot (D : {fset clause * annot}) A :=
let: (C,E) := A in
match E with
| aAU (s, t, H) => ((t^+ |` C, aVoid) \in D) && ((s^+ |` C, aAXU (s, t, C |` H)) \in D) || (C \in H)
| aVoid => [some s in positives F, [some t in positives F, [some C' in Cs,
(C == fAU s t^+ |` C') && ((C', aAU (s, t, fset0)) \in D)]]]
|| [some s in negatives F, [some t in negatives F, [some C' in Cs,
(C == fAR s t^- |` C') && ((C', aAR (s, t, fset0)) \in D)]]]
| aAR (s, t, H) => ((t^- |` C, aVoid) \in D) && ((s^- |` C, aAXR (s, t, C |` H)) \in D) || (C \in H)
| aAXR(s ,t, H) => (R C,aAR (s,t,H)) \in D
| _ => false
end.
Definition step_jmp (D : {fset clause * annot}) (A : clause * annot) :=
let (C,E) := A in (R C, aR E) \in D.
Definition step (D : {fset clause * annot}) : {fset clause * annot} :=
[fset A in U | [|| step_plain D A, step_annot D A| step_jmp D A ]].
Lemma bounded_step : bounded U step.
Lemma mono_step : monotone step.
Lemma plainP C u E :
step_plain_cases (fset.lfp U step) C u E -> (u |` C,E) \in U -> step_plain (fset.lfp U step) (u |` C,E).
Lemma stepP (A : clause * annot) : A \in U -> reflect (tab A) (A \in fset.lfp U step).
Lemma tab_decF (A : clause * annot) : A \in U -> decidable (tab A).
End tab_closure.
Definition sfc C : clause := \bigcup_(s in C) ssub s.
Lemma sfc_bigcup (T : choiceType) (C : {fset T}) S :
(forall s, sf_closed (S s)) -> sf_closed (\bigcup_(s in C) S s).
Lemma closed_sfc C : sf_closed (sfc C).
Lemma sub_sfc C : C `<=` (sfc C).
Lemma plain_inU {C} : (C,aVoid) \in U (sfc C).
Lemma aAU_inU {C s t H} :
(C,aAU (s, t, H)) \in U (sfc (fAU s t^+ |` C `|` \bigcup_(C' in H) C')).
Lemma aAR_inU {C s t H} :
(C,aAR (s, t, H)) \in U (sfc (fAR s t^- |` C `|` \bigcup_(C' in H) C')).
Lemma aAXU_inU {C s t H} :
(C,aAXU (s, t, H)) \in U (sfc (fAU s t^+ |` C `|` \bigcup_(C' in H) C')).
Lemma aAXR_inU {C s t H} :
(C,aAXR (s, t, H)) \in U (sfc (fAR s t^- |` C `|` \bigcup_(C' in H) C')).
Lemma tab_dec A : decidable (tab A).