Documentation

LeanPool.PDL.StayingInFL

Staying inside the Fischer-Ladner closure #

Here we define what it means for a Sequent to be inside the FL closure of another, and then prove several helper lemmas to show that all rules of our tableau system stay in the closure.

The main two results are LocalTableau.stays_in_FL and PdlRule.stays_in_FL.

Intuitively, we want to say that each step from (L,R,O) in a tableau to (L',R',O') stays in the FL of (L,R,O). To be precise, each side left/right stays within its own FL closure. However, this does not mean that L' must be in the FL of L, because the O may also contribute to the left part. This makes Sequent.subseteqFL tricky to define.

Sequent Y is a component-wise subset of the FL-closure of X. Note that by component we mean left and right (and not L, R, O).

WORRY: Is using Sequent.O.L here a problem because it might not be injective? (Because it calls unload where both ⌊a⌋⌊b⌋p and ⌊a⌋⌈b⌉p become ⌈a⌉⌈b⌉p.)

Equations
Instances For
    theorem PDL.testsOfProgram_in_FLb {φ : Formula} {α : Program} (φ_in : φ ∈ testsOfProgram α) (ψ : Formula) :
    φ ∈ FLb α ψ
    theorem PDL.neg_testsOfProgram_in_FLb {φ : Formula} {α : Program} (φ_in : φ ∈ testsOfProgram α) (ψ : Formula) :
    φ.neg ∈ FLb α ψ
    theorem PDL.Dset_tests_in_FL (α : Program) (F : List Formula) (δ : List Program) (in_D : (F, δ) ∈ Dset α) (ψ : Formula) :
    F ⊆ FLb α ψ
    theorem PDL.Dset_progs_in_FL (F : List Formula) (δ : List Program) (α : Program) (in_D : (F, δ) ∈ Dset α) (ψ : Formula) :
    δ ≠ [] → (Formula.boxes δ ψ).neg ∈ FLb α ψ
    theorem PDL.unfoldDiamond_in_FL (α : Program) (ψ : Formula) (X : List Formula) :
    X ∈ unfoldDiamond α ψ → ∀ φ ∈ X, φ ∈ FL (Formula.box α ψ)
    theorem PDL.P_in_FL (α : Program) (δ : List Program) (ℓ : TP α) (ψ : Formula) :
    δ ∈ P α ℓ → Formula.boxes δ ψ ∈ FL (Formula.box α ψ)
    theorem PDL.unfoldBox_in_FL (α : Program) (ψ : Formula) (X : List Formula) :
    X ∈ unfoldBox α ψ → ∀ φ ∈ X, φ ∈ FL (Formula.box α ψ)
    theorem PDL.OneSidedLocalRule.stays_in_FL {precond : Finset Formula} {ress : Finset (Finset Formula)} (rule : OneSidedLocalRule precond ress) (res : Finset Formula) :
    res ∈ ress → res ⊆ precond.FL

    Helper for LocalRule.stays_in_FL

    theorem PDL.LocalRule.stays_in_FL {X : Sequent} {B : Finset Sequent} (rule : LocalRule X B) (Y : Sequent) :
    Y ∈ B → Y.subseteqFL X

    Helper for LocalTableau.stays_in_FL

    theorem PDL.Olf.sdiff_L_sub (O Ocond : Olf) :
    (O \ Ocond).L ⊆ O.L

    Removing something from an Olf can only remove formulas on the left.

    theorem PDL.Olf.sdiff_R_sub (O Ocond : Olf) :
    (O \ Ocond).R ⊆ O.R

    Removing something from an Olf can only remove formulas on the right.

    theorem PDL.Olf.L_sub_of_sub {O Ocond : Olf} (h : Ocond ⊆ O) :
    Ocond.L ⊆ O.L

    If Ocond ⊆ O then the left part of Ocond is included in that of O.

    theorem PDL.Olf.R_sub_of_sub {O Ocond : Olf} (h : Ocond ⊆ O) :
    Ocond.R ⊆ O.R

    If Ocond ⊆ O then the right part of Ocond is included in that of O.

    theorem PDL.LocalRuleApp.stays_in_FL (lra : LocalRuleApp) (W : Sequent) :
    W ∈ lra.C → W.subseteqFL lra.X

    Helper for LocalTableau.stays_in_FL: applying a local rule stays in the FL closure.

    End nodes of a local tableau are FischerLadner-subsets of the root. This is used for move_inside_FL.

    theorem PDL.Finset.mem_FL_of_mem {X : Finset Formula} {ψ x : Formula} (hψ : ψ ∈ X) (hx : x ∈ FL ψ) :
    x ∈ X.FL

    Anything in the FL closure of a member of X is in the FL closure of X.

    theorem PDL.PdlRule.stays_in_FL {X Y : Sequent} (rule : PdlRule X Y) :

    Making a PDL rule step stays in the Fischer-Ladner closure. This is used for move_inside_FL.