Equations
- instTNodeDecidableEq a b = instDecidableEqProd a b
Equations
- lengthOfTNode (L, R) = lengthOfSet L + lengthOfSet R
Instances For
Equations
- TNodeHasLength = { lengthOf := lengthOfTNode }
Equations
- TNodeHasSat = { Satisfiable := fun (x : TNode) => match x with | (L, R) => HasSat.Satisfiable (L ∪ R) }
Equations
- f_in_TNode f LR = (f ∈ LR.1 ∪ LR.2)
Instances For
A set X is simple iff all P ∈ X are (negated) atoms or □φ or ¬□φ.
Equations
- SimpleForm Formula.bottom = True
- SimpleForm (~Formula.bottom) = True
- SimpleForm (·a) = True
- SimpleForm (~·a) = True
- SimpleForm (□a) = True
- SimpleForm (~(□a)) = True
- SimpleForm x✝ = False
Instances For
Equations
- instDecidableSimpleForm = isTrue True.intro
- instDecidableSimpleForm = isTrue True.intro
- instDecidableSimpleForm = isTrue True.intro
- instDecidableSimpleForm = isFalse instDecidableSimpleForm.proof_1
- instDecidableSimpleForm = isTrue True.intro
- instDecidableSimpleForm = isTrue True.intro
- instDecidableSimpleForm = isTrue True.intro
- instDecidableSimpleForm = isFalse instDecidableSimpleForm.proof_1
- instDecidableSimpleForm = isFalse instDecidableSimpleForm.proof_1
- φ : Formula
- φinX : self.φ ∈ X
- not_simple : ¬SimpleForm self.φ
Instances For
Equations
- notSimpleSetToForm not_simple = { φ := Classical.choose ⋯, φinX := ⋯, not_simple := ⋯ }
Instances For
Let X_A := { R | [A]R ∈ X }.
Equations
- formProjection (□f) = some f
- formProjection x✝ = none
Instances For
Equations
- projection x✝ = x✝.biUnion fun (x : Formula) => (formProjection x).toFinset
Instances For
Equations
- projectTNode (L, R) = (projection L, projection R)
Instances For
@[simp]
theorem
projection_length_leq
(f : Formula)
:
(projection {f}).sum lengthOfFormula ≤ lengthOfFormula f
- bot : OneSidedLocalRule {⊥} ∅
- not (φ : Formula) : OneSidedLocalRule {φ, ~φ} ∅
- neg (φ : Formula) : OneSidedLocalRule {~~φ} [{φ}]
- con (φ ψ : Formula) : OneSidedLocalRule {φ⋀ψ} [{φ, ψ}]
- ncon (φ ψ : Formula) : OneSidedLocalRule {~(φ⋀ψ)} [{~φ}, {~ψ}]
Instances For
Equations
- oneSidedL {precond : Finset Formula} {ress : List (Finset Formula)} (orule : OneSidedLocalRule precond ress) : LocalRule (precond, ∅) (List.map (fun (res : Finset Formula) => (res, ∅)) ress)
- oneSidedR {precond : Finset Formula} {ress : List (Finset Formula)} (orule : OneSidedLocalRule precond ress) : LocalRule (∅, precond) (List.map (fun (res : Finset Formula) => (∅, res)) ress)
- LRnegL (ϕ : Formula) : LocalRule ({ϕ}, {~ϕ}) ∅
- LRnegR (ϕ : Formula) : LocalRule ({~ϕ}, {ϕ}) ∅
Instances For
Equations
- jvoc LR = HasVocabulary.voc LR.1 ∩ HasVocabulary.voc LR.2
Instances For
theorem
oneSidedRule_preserves_other_side_L
{L R : Finset Formula}
{C : List TNode}
{fst✝ : Finset Formula}
{a✝ : List (Finset Formula)}
{rule : LocalRule (fst✝, ∅) (List.map (fun (res : Finset Formula) => (res, ∅)) a✝)}
{hC : C = applyLocalRule rule (L, R)}
{preproof : fst✝ ⊆ L ∧ ∅ ⊆ R}
{orule : OneSidedLocalRule fst✝ a✝}
{ruleApp : LocalRuleApp (L, R) C}
:
ruleApp = LocalRuleApp.mk (List.map (fun (res : Finset Formula) => (res, ∅)) a✝) fst✝ ∅ rule preproof →
∀ (rule_is_left : rule = LocalRule.oneSidedL orule), ∀ c ∈ C, c.2 = R
theorem
oneSidedRule_preserves_other_side_R
{L R : Finset Formula}
{C : List TNode}
{snd✝ : Finset Formula}
{a✝ : List (Finset Formula)}
{rule : LocalRule (∅, snd✝) (List.map (fun (res : Finset Formula) => (∅, res)) a✝)}
{hC : C = applyLocalRule rule (L, R)}
{preproof : ∅ ⊆ L ∧ snd✝ ⊆ R}
{orule : OneSidedLocalRule snd✝ a✝}
{ruleApp : LocalRuleApp (L, R) C}
:
ruleApp = LocalRuleApp.mk (List.map (fun (res : Finset Formula) => (∅, res)) a✝) ∅ snd✝ rule preproof →
∀ (rule_is_right : rule = LocalRule.oneSidedR orule), ∀ c ∈ C, c.1 = L
theorem
localRule_does_not_increase_vocab_L
{Lcond Rcond : Finset Formula}
{ress : List SubPair}
(rule : LocalRule (Lcond, Rcond) ress)
(res : SubPair)
:
res ∈ ress → HasVocabulary.voc res.1 ⊆ HasVocabulary.voc Lcond
theorem
localRule_does_not_increase_vocab_R
{Lcond Rcond : Finset Formula}
{ress : List SubPair}
(rule : LocalRule (Lcond, Rcond) ress)
(res : SubPair)
:
res ∈ ress → HasVocabulary.voc res.2 ⊆ HasVocabulary.voc Rcond
theorem
LocalRuleUniqueL
{L : Finset Formula}
{α : Formula}
{R : Finset Formula}
{C : List TNode}
{precond : Finset Formula}
{ress : List (Finset Formula)}
(α_in_L : α ∈ L)
(lrApp : LocalRuleApp (L, R) C)
(orule : OneSidedLocalRule precond ress)
(precond_eq : precond = {α})
(c : TNode)
:
If a local rule replaces formula α by some set res
when applied to some
node LR, then all children of LR in any LocalTableau
contain α or res.
This is used to prove that all paths are saturated.
theorem
LocalRuleUniqueR
{R : Finset Formula}
{α : Formula}
{L : Finset Formula}
{C : List TNode}
{precond : Finset Formula}
{ress : List (Finset Formula)}
(α_in_R : α ∈ R)
(lrApp : LocalRuleApp (L, R) C)
(orule : OneSidedLocalRule precond ress)
(precond_eq : precond = {α})
(c : TNode)
:
Almost exactly the same as LocalRuleUniqueL
.
- fromRule {LR : TNode} {C : List TNode} (ruleA : LocalRuleApp LR C) (subTabs : (c : TNode) → c ∈ C → LocalTableau c) : LocalTableau LR
- fromSimple {LR : TNode} (isSimple : Simple LR) : LocalTableau LR
Instances For
noncomputable def
notSimpleToRuleApp
{L R : Finset Formula}
:
¬Simple (L, R) → (C : List TNode) × LocalRuleApp (L, R) C
If X is not simple, then a local rule can be applied (page 13).
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
conDecreasesLength
{φ ψ : Formula}
:
∑ x ∈ {φ, ψ}, lengthOfFormula x < 1 + lengthOfFormula φ + lengthOfFormula ψ
theorem
localRuleDecreasesLengthSide
{Lcond Rcond : Finset Formula}
{ress : List SubPair}
(rule : LocalRule (Lcond, Rcond) ress)
(res : SubPair)
:
res ∈ ress →
HasLength.lengthOf res.1 < HasLength.lengthOf Lcond ∧ res.2 = ∅ ∨ HasLength.lengthOf res.2 < HasLength.lengthOf Rcond ∧ res.1 = ∅
theorem
localRuleAppDecreasesLengthSide
(X Cond Res : Finset Formula)
(hyp : HasLength.lengthOf Res < HasLength.lengthOf Cond)
(precondProof : Cond ⊆ X)
:
HasLength.lengthOf (X \ Cond ∪ Res) < HasLength.lengthOf X
theorem
localRuleAppDecreasesLength
{C : List TNode}
{L R : Finset Formula}
(lrApp : LocalRuleApp (L, R) C)
(c : TNode)
:
c ∈ C → lengthOfTNode c < lengthOfTNode (L, R)
Lift definition of projection to TNodes, including the diamond formula left or right.
Equations
- diamondProjectTNode (Sum.inl φ) (L, R) = (projection L ∪ {~φ}, projection R)
- diamondProjectTNode (Sum.inr φ) (L, R) = (projection L, projection R ∪ {~φ})
Instances For
Equations
- localTableauHasLength = { lengthOf := fun (x : (LR : TNode) × LocalTableau LR) => match x with | ⟨(L, R), snd⟩ => lengthOfTNode (L, R) }
@[irreducible]
Open end nodes of a given LocalTableau
.
Equations
- One or more equations did not get rendered due to their size.
- endNodesOf ⟨LR, LocalTableau.fromSimple isSimple⟩ = [LR]
Instances For
@[simp]
theorem
endNodesOfSimple
{LR : TNode}
{hyp : Simple LR}
:
endNodesOf ⟨LR, LocalTableau.fromSimple hyp⟩ = [LR]
noncomputable def
endNodeIsEndNodeOfChild
{LR : TNode}
{C : List TNode}
{subTabs : (c : TNode) → c ∈ C → LocalTableau c}
{E : TNode}
(ruleA : LocalRuleApp LR C)
(E_in : E ∈ endNodesOf ⟨LR, LocalTableau.fromRule ruleA subTabs⟩)
:
{ x : TNode // ∃ (h : x ∈ C), E ∈ endNodesOf ⟨x, subTabs x h⟩ }
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem
lrEndNodes
{LR : TNode}
{C : List TNode}
{ruleA : LocalRuleApp LR C}
{subTabs : (c : TNode) → c ∈ C → LocalTableau c}
:
endNodesOf ⟨LR, LocalTableau.fromRule ruleA subTabs⟩ = (List.map
(fun (x : { x : TNode // x ∈ C }) =>
match x with
| ⟨c, c_in⟩ => endNodesOf ⟨c, subTabs c c_in⟩)
C.attach).flatten
@[irreducible]
theorem
endNodesOfLEQ
{LR Z : TNode}
{ltLR : LocalTableau LR}
:
Z ∈ endNodesOf ⟨LR, ltLR⟩ → lengthOfTNode Z ≤ lengthOfTNode LR
theorem
endNodesOfLocalRuleLT
{LR : TNode}
{a✝ : List TNode}
{lrApp : LocalRuleApp LR a✝}
{subTabs : (c : TNode) → c ∈ a✝ → LocalTableau c}
{Z : TNode}
:
Z ∈ endNodesOf ⟨LR, LocalTableau.fromRule lrApp subTabs⟩ → lengthOfTNode Z < lengthOfTNode LR
Definition 16, page 29. Notes:
- "loc" may actually make no progress (by using "LocalTableau.fromSimple"), but that seems okay.
- base case for simple tableaux is part of "atm" which can be applied to L or to R.
- loc {LR : TNode} (lt : LocalTableau LR) (next : (Y : TNode) → Y ∈ endNodesOf ⟨LR, lt⟩ → ClosedTableau Y) : ClosedTableau LR
- atmL {LR : TNode} {ϕ : Formula} : ~(□ϕ) ∈ LR.1 → Simple LR → ClosedTableau (diamondProjectTNode (Sum.inl ϕ) LR) → ClosedTableau LR
- atmR {LR : TNode} {ϕ : Formula} : ~(□ϕ) ∈ LR.2 → Simple LR → ClosedTableau (diamondProjectTNode (Sum.inr ϕ) LR) → ClosedTableau LR
Instances For
Equations
- closedToLocal (ClosedTableau.loc lt next) = lt
- closedToLocal (ClosedTableau.atmL a SimpX a_1) = LocalTableau.fromSimple SimpX
- closedToLocal (ClosedTableau.atmR a SimpX a_1) = LocalTableau.fromSimple SimpX
Instances For
- byTableau {φ ψ : Formula} : ClosedTableau ({φ}, {~ψ}) → ProvableImplication φ ψ
Instances For
@[irreducible]
Equations
- One or more equations did not get rendered due to their size.