Documentation

Pdl.Soundness

Soundness (Section 6) #

Soundness of the PDL rules #

theorem pdlRuleSat {X Y : Sequent} (r : PdlRule X Y) (satX : HasSat.satisfiable X) :

The PDL rules are sound.

Companion, cEdge, etc. #

def companionOf {X : Sequent} {tab : Tableau [] X} (s : PathIn tab) (lpr : LoadedPathRepeat (tabAt s).fst (tabAt s).snd.fst) :
(tabAt s).snd.snd = Tableau.lrep lprPathIn tab

To get the companion of a LoadedPathRepeat we rewind the path with the lpr value. The succ is there because the lpr values are indices of the history starting with 0, but PathIn.rewind 0 would do nothing.

Equations
Instances For
    def companion {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :

    s ♥ t means s is a LoadedPathRepeat and the companionOf s is t.

    Equations
    Instances For
      theorem nodeAt_companionOf_eq_toHistory_get_lpr_val {a✝ : Sequent} {tab : Tableau [] a✝} (s : PathIn tab) (lpr : LoadedPathRepeat (tabAt s).fst (tabAt s).snd.fst) (h : (tabAt s).snd.snd = Tableau.lrep lpr) :
      nodeAt (companionOf s lpr h) = List.get s.toHistory ( lpr)

      The node at a companion is the same as the one in the history.

      theorem nodeAt_companionOf_setEq {X : Sequent} {tab : Tableau [] X} (s : PathIn tab) (lpr : LoadedPathRepeat (tabAt s).fst (tabAt s).snd.fst) (h : (tabAt s).snd.snd = Tableau.lrep lpr) :
      theorem companion_loaded {a✝ : Sequent} {a✝¹ : Tableau [] a✝} {s t : PathIn a✝¹} :

      Any repeat and companion are both loaded.

      theorem companionOf_length_lt_length {a✝ : Sequent} {tab : Tableau [] a✝} {t : PathIn tab} (lpr : LoadedPathRepeat (tabAt t).fst (tabAt t).snd.fst) (h : (tabAt t).snd.snd = Tableau.lrep lpr) :

      The companion is strictly before the the repeat.

      def cEdge {X : Sequent} {ctX : Tableau [] X} (s t : PathIn ctX) :
      Equations
      Instances For

        ≡ᶜ and Clusters #

        def cEquiv {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :

        Nodes are c-equivalent iff there are paths both ways. Note that this is not a closure, so we do not want Relation.EqvGen here.

        Equations
        Instances For
          theorem cEquiv.symm {a✝ : Sequent} {tab : Tableau [] a✝} (s t : PathIn tab) :
          s ≡ᶜ t t ≡ᶜ s

          ≡ᶜ is symmetric.

          def clusterOf {X : Sequent} {tab : Tableau [] X} (p : PathIn tab) :
          Equations
          Instances For
            def before {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :

            We have before s t iff there is a path from s to t but not from t to s. This means the cluster of s comes before the cluster of t in tab. NB: The notes use ◃* here but we use ◃⁺. The definitions are equivalent.

            Equations
            Instances For

              s <ᶜ t means there is a ◃-path from s to t but not from t to s. This means t is simpler to deal with first.

              Equations
              Instances For
                theorem before.irrefl {X : Sequent} {tab : Tableau [] X} :

                The <ᶜ relation is irreflexive.

                theorem before.trans {X : Sequent} {tab : Tableau [] X} :

                The <ᶜ relation is transitive.

                The transitive closure of <ᶜ (which in fact is the same as <ᶜ) is irreflexive.

                The before relation in a tableau is well-founded.

                theorem flip_before.irrefl {X : Sequent} {tab : Tableau [] X} :

                The converse of <ᶜ is irreflexive.

                theorem Relation.TransGen.flip_iff (α : Type) {r : ααProp} {a b : α} :
                TransGen (flip r) a b TransGen r b a

                The transtive closure of the converse of <ᶜ is irreflexive.

                The before relation in a tableau is converse well-founded.

                ≣ᶜ is an equivalence relation and <ᶜ is well-founded and converse well-founded. The converse well-founded is what we really need for induction proofs.

                theorem eProp2.a {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
                s ⋖_ ts <ᶜ t t ≡ᶜ s
                theorem eProp2.b {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
                s tt ≡ᶜ s
                theorem eProp2.c_help {X : Sequent} {tab : Tableau [] X} (s : PathIn tab) :
                (nodeAt s).isFree = true∀ (t : PathIn tab), s < ts <ᶜ t
                theorem eProp2.c {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
                (nodeAt s).isFree = trues ⋖_ ts <ᶜ t
                theorem not_cEquiv_of_free_loaded {a✝ : Sequent} {tab : Tableau [] a✝} (s t : PathIn tab) (s_free : (nodeAt s).isFree = true) (t_loaded : (nodeAt t).isLoaded = true) :

                A free node and a loaded node cannot be ≡ᶜ equivalent.

                theorem eProp2.d {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
                (nodeAt s).isLoaded = true(nodeAt t).isFree = trues ⋖_ ts <ᶜ t
                theorem eProp2.d_help {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
                (nodeAt t).isLoaded = true(nodeAt s).isFree = truet ◃⁺ s¬s ◃⁺ t
                theorem eProp2.e {X : Sequent} {tab : Tableau [] X} (s u t : PathIn tab) :
                s <ᶜ uu <ᶜ ts <ᶜ t

                <ᶜ is transitive

                theorem eProp2.f {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
                t ◃⁺ s¬t ≡ᶜ st <ᶜ s
                theorem eProp2.f_tweak {X : Sequent} {tab : Tableau [] X} (s u t : PathIn tab) :
                s ◃⁺ uu ◃⁺ t¬t ≡ᶜ u¬t ≡ᶜ s
                theorem eProp2.g {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
                s <ᶜ t¬s ≡ᶜ t
                theorem eProp2.h {X : Sequent} {tab : Tableau [] X} (s u t : PathIn tab) :
                s <ᶜ us ≡ᶜ tt <ᶜ u
                theorem eProp2 {X : Sequent} {tab : Tableau [] X} (s u t : PathIn tab) :
                (s ⋖_ ts <ᶜ t t ≡ᶜ s) (s tt ≡ᶜ s) ((nodeAt s).isFree = trues ⋖_ ts <ᶜ t) ((nodeAt s).isLoaded = true(nodeAt t).isFree = trues ⋖_ ts <ᶜ t) (t <ᶜ uu <ᶜ st <ᶜ s) (t ◃⁺ s¬t ≡ᶜ st <ᶜ s) (s <ᶜ t¬s ≡ᶜ t) (s <ᶜ us ≡ᶜ tt <ᶜ u)

                Soundness #

                theorem localLoadedDiamond (α : Program) {X : Sequent} (ltab : LocalTableau X) {W : Type} {M : KripkeModel W} {v w : W} (v_α_w : relate M α v w) (v_t : (M, v)X) (ξ : AnyFormula) {side : Side} (negLoad_in : (~''(AnyFormula.loaded (αξ))).in_side side X) (w_nξ : (M, w)~''ξ) :
                YendNodesOf ltab, (M, v)Y (Y.isFree = true ∃ (F : List Formula) (γ : List Program), (~''(AnyFormula.loadBoxes γ ξ)).in_side side Y relateSeq M γ v w (M, v)F (F, γ) H α (Y.without (~''(AnyFormula.loadBoxes γ ξ))).isFree = true)

                Helper to deal with local tableau in loadedDiamondPaths.

                theorem Sequent.isLoaded_of_negAnyFormula_loaded {α : Program} {ξ : AnyFormula} {side : Side} {X : Sequent} (negLoad_in : (~''(AnyFormula.loaded (αξ))).in_side side X) :
                theorem boxes_true_at_k_of_Vector_rel {W : Type} {M : KripkeModel W} (ξ : AnyFormula) (δ : List Program) (h : ¬δ = []) (ws : List.Vector W δ.length.succ) (ws_rel : ∀ (i : Fin δ.length), relate M (δ.get i) (ws.get i) (ws.get i.succ)) (k : Fin δ.length) (w_nξ : (M, ws.last)~''ξ) :
                @[irreducible]
                theorem loadedDiamondPaths (α : Program) {X : Sequent} (tab : Tableau [] X) (root_free : X.isFree = true) (t : PathIn tab) {W : Type} {M : KripkeModel W} {v w : W} (v_t : (M, v)nodeAt t) (ξ : AnyFormula) {side : Side} (negLoad_in : (~''(AnyFormula.loaded (αξ))).in_side side (nodeAt t)) (v_α_w : relate M α v w) (w_nξ : (M, w)~''ξ) :
                ∃ (s : PathIn tab), t ◃⁺ s (HasSat.satisfiable (nodeAt s) ¬s ≡ᶜ t (~''ξ).in_side side (nodeAt s) (M, w)nodeAt s ((nodeAt s).without (~''ξ)).isFree = true)

                Soundness of loading and repeats: a tableau can immitate all moves in a model.

                theorem simpler_equiv_simpler {a✝ : Sequent} {tab : Tableau [] a✝} {u s t : PathIn tab} :
                s <ᶜ us ≡ᶜ tt <ᶜ u
                theorem tableauThenNotSat {Root : Sequent} (tab : Tableau [] Root) (Root_isFree : Root.isFree = true) (t : PathIn tab) :

                Any node in a closed tableau with a free root is not satisfiable. This is the main argument for soundness.

                theorem soundness (φ : Formula) :

                All provable formulas are semantic tautologies. See tableauThenNotSat for what the notes call soundness.