Documentation

Pdl.PartInterpolation

Interpolants for Partitions (big part of Section 7) #

Note that we can skip much of subsection 7.3 because we worked already with split tableaux anyway.

Joint vocabulary #

def jvoc (X : Sequent) :

The joint vocabulary occurring on both the left and the right side.

Equations
Instances For
    theorem jvoc_sub_of_voc_sub {Y X : Sequent} (hl : Y.left.fvoc X.left.fvoc) (hr : Y.right.fvoc X.right.fvoc) :

    Partition Interpolants #

    Like Olf.voc but without the ⊕ inside.

    Equations
    Instances For
      Equations
      Instances For

        Interpolants for local rules #

        theorem LoadRule_voc {χ : LoadFormula} {ress : List (List Formula × Option NegLoadFormula)} (lr : LoadRule (~'χ) ress) :
        lfovoc ress χ.voc
        theorem localRule_does_not_increase_vocab_L {Cond : Sequent} {B : List Sequent} (rule : LocalRule Cond B) (res : Sequent) :
        res Bres.left.fvoc Cond.left.fvoc
        theorem localRule_does_not_increase_vocab_R {Cond : Sequent} {B : List Sequent} (rule : LocalRule Cond B) (res : Sequent) :
        res Bres.right.fvoc Cond.right.fvoc
        theorem localRuleApp_does_not_increase_jvoc {X : Sequent} {C : List Sequent} (ruleA : LocalRuleApp X C) (Y : Sequent) :
        Y Cjvoc Y jvoc X
        def localInterpolantStep (L R : List Formula) (o : Olf) (C : List Sequent) (ruleA : LocalRuleApp (L, R, o) C) (subθs : (c : Sequent) → c CPartInterpolant c) :

        Maehara's method for single-step local rule applications. This covers easy cases without any loaded path repeats. We do not use localRuleTruth to prove this, but the more specific lemmas oneSidedL_sat_down and oneSidedL_sat_down.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Cluster tools #

          def repeatsOf {X : Sequent} {tab : Tableau [] X} (s : PathIn tab) :
          List (PathIn tab)
          Equations
          Instances For
            def all_cEdge {X : Sequent} {tab : Tableau [] X} (s : PathIn tab) :
            List (PathIn tab)
            Equations
            Instances For
              theorem all_cEdge_spec {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
              t all_cEdge s s ⋖_ t s t
              def all_cEdge_rev {X : Sequent} {tab : Tableau [] X} (t : PathIn tab) :
              List (PathIn tab)
              Equations
              Instances For
                theorem all_cEdge_rev_spec {X : Sequent} {tab : Tableau [] X} (s t : PathIn tab) :
                def loadedBelow {a✝ : History} {a✝¹ : Sequent} {tab : Tableau a✝ a✝¹} :
                PathIn tabList (PathIn tab)

                Loaded nodes "below" the given one, also allowing ♥ steps.

                Equations
                Instances For
                  def loadedAbove {a✝ : History} {a✝¹ : Sequent} {tab : Tableau a✝ a✝¹} :
                  PathIn tabList (PathIn tab)

                  Loaded nodes "above" the given one, also allowing backwards ♥ steps.

                  Equations
                  Instances For
                    def clusterListOf {a✝ : History} {a✝¹ : Sequent} {tab : Tableau a✝ a✝¹} (p : PathIn tab) :
                    List (PathIn tab)

                    List of all other nodes in the same cluster, essentially a constructive version of clusterOf. Computed as the intersection of loadedAbove and loadedBelow.

                    Equations
                    Instances For
                      theorem clusterListOf_spec {a✝ : Sequent} {tab : Tableau [] a✝} {q : PathIn tab} (p : PathIn tab) :
                      def rootOf {a✝ : History} {a✝¹ : Sequent} {tab : Tableau a✝ a✝¹} :
                      List (PathIn tab)PathIn tab
                      Equations
                      Instances For
                        theorem cluster_all_left_loaded {a✝ : History} {a✝¹ : Sequent} {tab : Tableau a✝ a✝¹} {p : PathIn tab} (h : (nodeAt p).2.2.isLeft) (q : PathIn tab) :
                        q clusterListOf p(nodeAt q).2.2.isLeft

                        Lemma 7.22 (b) for left side

                        theorem cluster_all_right_loaded {a✝ : History} {a✝¹ : Sequent} {tab : Tableau a✝ a✝¹} {p : PathIn tab} (h : (nodeAt p).2.2.isRight) (q : PathIn tab) :

                        Lemma 7.22 (b) for right side

                        Equations
                        Instances For

                          Quasi-Tableaux #

                          inductive Typ :
                          Instances For
                            inductive QuasiTab :

                            Simple tree data type for Q.

                            Instances For
                              @[irreducible]
                              def Qchildren (C : List Sequent) (t : Typ) (Hist : List Sequent) (X : Sequent) :
                              Equations
                              Instances For
                                def Q {a✝ : History} {a✝¹ : Sequent} {tab : Tableau a✝ a✝¹} {r : PathIn tab} :

                                Quasi-Tableau from Def 7.31. No names for the nodes as we use an inductive type, so we just write X for Δₓ

                                Equations
                                Instances For

                                  Interpolants for proper clusters #

                                  def exitsOf {Hist : History} {L R : List Formula} {nlf : NegLoadFormula NegLoadFormula} (tab : Tableau Hist (L, R, some nlf)) :
                                  List (PathIn tab)

                                  The exits of a cluster: (C \ C+).

                                  Equations
                                  Instances For
                                    def PathIn.children {a✝ : History} {a✝¹ : Sequent} {tab : Tableau a✝ a✝¹} (p : PathIn tab) :
                                    List (PathIn tab)
                                    Equations
                                    Instances For
                                      def plus_exits {X : Sequent} {tab : Tableau [] X} (C : List (PathIn tab)) :
                                      List (PathIn tab)

                                      Exits from a given list of nodes. Something like this should get us from C to C+.

                                      Equations
                                      Instances For
                                        def clusterInterpolation_right {Hist : History} {L R : List Formula} {nlf : NegLoadFormula} (tab : Tableau Hist (L, R, some (Sum.inr nlf))) (exitIPs : (e : PathIn tab) → e exitsOf tabPartInterpolant (nodeAt e)) :

                                        W.l.o.g version of clusterInterpolation where loaded formula is on the right side.

                                        Equations
                                        Instances For
                                          def clusterInterpolation {Hist : History} {L R : List Formula} {snlf : NegLoadFormula NegLoadFormula} (tab : Tableau Hist (L, R, some snlf)) (exitIPs : (e : PathIn tab) → e exitsOf tabPartInterpolant (nodeAt e)) :

                                          Given a tableau where the root is loaded, and exit interpolants, interpolate the root.

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            def tabToInt {X : Sequent} (tab : Tableau [] X) :
                                            Equations
                                            Instances For