PDL-Tableaux (Section 4) #
Projections #
Equations
- projection x✝¹ x✝ = (List.map (fun (x : Formula) => formProjection x✝¹ x) x✝).reduceOption
Instances For
Equations
- Finset.projection x✝¹ x✝ = (Finset.image (fun (x : Formula) => (formProjection x✝¹ x).toFinset) x✝).sup id
Instances For
Histories and Repeats #
Loaded Path Repeats #
A lpr means we can go k steps back in the history to
reach an equal node, and all nodes on the way are loaded.
Note: k=0 means the first element of Hist is the companion.
Equations
Instances For
If there is any loaded path repeat, then we can compute one.
FIXME There is probably a more elegant way, avoiding Nonempty and Fin.find?.
Something like: def getLPR (H : History) (X : Sequent) : Option ... := ...
that might also give us uniqueness of LPRs?
Equations
- One or more equations did not get rendered due to their size.
Instances For
Free, forbidden and allowed repeats #
In Tableau we only want to allow the application of a rule
when there is no loaded-path repeat and there is no free repeat.
For this we introduce FreeRepeat and the flprep abbreviation.
A free repeat is a non-loaded sequent that occured before. Values of this type are pairs: the number of steps to go back in the history and a proof that we then find the same set.
Instances For
Either a free repeat or a loaded-path repeat.
Note that the negation of this is not the same as ¬ rep because it will still allow
loaded repeats that are not loaded-path repeats, at which Tableau may continue.
See also posOf that is used to define tableauGame later.
Instances For
The PDL rules #
A rule to go from X to Y. Note the four variants of the modal rule.
- loadL {L : Finset Formula} {δ : List Program} {α : Program} {φ : Formula} {Y : Finset Formula × Finset Formula × Option (NegLoadFormula ⊕ NegLoadFormula)} {R : Finset Formula} : (~⌈⌈δ⌉⌉⌈α⌉φ) ∈ L → ¬φ.isBox → Y = (L.erase (~⌈⌈δ⌉⌉⌈α⌉φ), R, some (Sum.inl (~'⌊⌊δ⌋⌋⌊α⌋AnyFormula.normal φ))) → PdlRule (L, R, none) Y
- loadR {R : Finset Formula} {δ : List Program} {α : Program} {φ : Formula} {Y : Finset Formula × Finset Formula × Option (NegLoadFormula ⊕ NegLoadFormula)} {L : Finset Formula} : (~⌈⌈δ⌉⌉⌈α⌉φ) ∈ R → ¬φ.isBox → Y = (L, R.erase (~⌈⌈δ⌉⌉⌈α⌉φ), some (Sum.inr (~'⌊⌊δ⌋⌋⌊α⌋AnyFormula.normal φ))) → PdlRule (L, R, none) Y
- freeL {X : Finset Formula × Finset Formula × Option (NegLoadFormula ⊕ NegLoadFormula)} {L R : Finset Formula} {δ : List Program} {α : Program} {φ : Formula} {Y : Finset Formula × Finset Formula × Option (NegLoadFormula ⊕ NegLoadFormula)} : X = (L, R, some (Sum.inl (~'⌊⌊δ⌋⌋⌊α⌋AnyFormula.normal φ))) → Y = (L ∪ {~⌈⌈δ⌉⌉⌈α⌉φ}, R, none) → PdlRule X Y
- freeR {X : Finset Formula × Finset Formula × Option (NegLoadFormula ⊕ NegLoadFormula)} {L R : Finset Formula} {δ : List Program} {α : Program} {φ : Formula} {Y : Finset Formula × Finset Formula × Option (NegLoadFormula ⊕ NegLoadFormula)} : X = (L, R, some (Sum.inr (~'⌊⌊δ⌋⌋⌊α⌋AnyFormula.normal φ))) → Y = (L, R ∪ {~⌈⌈δ⌉⌉⌈α⌉φ}, none) → PdlRule X Y
- modL {Y : Sequent} {L R : Finset Formula} {A : ℕ} {X : Sequent} {ξ : AnyFormula} : X = (L, R, some (Sum.inl (~'⌊·A⌋ξ))) → (Y = match ξ with | AnyFormula.normal φ => ({~φ} ∪ Finset.projection A L, Finset.projection A R, none) | AnyFormula.loaded χ => (Finset.projection A L, Finset.projection A R, some (Sum.inl (~'χ)))) → PdlRule X Y
- modR {Y : Sequent} {L R : Finset Formula} {A : ℕ} {X : Sequent} {ξ : AnyFormula} : X = (L, R, some (Sum.inr (~'⌊·A⌋ξ))) → (Y = match ξ with | AnyFormula.normal φ => (Finset.projection A L, {~φ} ∪ Finset.projection A R, none) | AnyFormula.loaded χ => (Finset.projection A L, Finset.projection A R, some (Sum.inr (~'χ)))) → PdlRule X Y
Instances For
Equations
- (PdlRule.loadL a a_1 a_2).isModal = False
- (PdlRule.loadR a a_1 a_2).isModal = False
- (PdlRule.freeL a a_1).isModal = False
- (PdlRule.freeR a a_1).isModal = False
- (PdlRule.modL a a_1).isModal = True
- (PdlRule.modR a a_1).isModal = True
Instances For
The Tableau [parent, grandparent, ...] child type.
This represents a closed tableau for X, constructed by either of:
- a local tableau for X followed by
Tableaufor all end nodes, - a PDL rule application followed by
Tableaufor all results, or - a loaded-path repeat (also called successful, see [Bor88] condition 6 in Def 14 on page 25).
- loc {Hist : History} {X : Sequent} (nflprep : ¬flprep Hist X) (nbas : ¬X.basic) (lt : LocalTableau X) (next : (Y : Sequent) → Y ∈ endNodesOf lt → Tableau (X :: Hist) Y) : Tableau Hist X
- pdl {Hist : History} {X Y : Sequent} (nflprep : ¬flprep Hist X) (bas : X.basic) (r : PdlRule X Y) (next : Tableau (X :: Hist) Y) : Tableau Hist X
- lrep {Hist : History} {X : Sequent} (lpr : LoadedPathRepeat Hist X) : Tableau Hist X
Instances For
Equations
- (Tableau.loc nflprep nbas lt next).size = 1 + ∑ x ∈ (endNodesOf lt).attach, match x with | ⟨Y, Y_in⟩ => (next Y Y_in).size
- (Tableau.pdl nflprep bas r next).size = 1 + next.size
- (Tableau.lrep lpr).size = 1
Instances For
Equations
- decidableExistsEndNodeOf = decidable_of_iff (∃ x ∈ (endNodesOf lt).attach, f ↑x ⋯) ⋯
Instances For
Equations
- (Tableau.loc nflprep nbas lt next).isLrep = False
- (Tableau.pdl nflprep bas r next).isLrep = False
- (Tableau.lrep lpr).isLrep = True
Instances For
A Sequent is inconsistent if there exists a closed tableau for it.
Instances For
A Sequent is consistent iff it is not inconsistent.
Equations
- consistent x✝ = ¬inconsistent x✝