Documentation

Pdl.Interpolation.ClusterSatDown

Satisfiability down the quasi-tableau, and the right half of the correctness of θ_r #

This file continues the development of Pdl.ClusterRho with

Definition 10.4 (the distance d_α) and Lemma 10.5 (its properties) are in Pdl.Distance, where they are numbered 7.47. The auxiliary notions used below — the evaluation evalQ of Q-formulas with an assignment, the witness distance witDist, and BasicBetween — are in Pdl.EvalQ.

Lemma 10.6 #

If x is a repeat in Q then the path from c(x) to x passes through a node with a basic label.

The proof in the paper claims that nodes of type 1 can only succeed nodes of type 3 with a basic label; that is not the case, see Definition 9.8. What is true, and what we use here, is that the label of a node of type 3 with a non-basic label strictly decreases when passing to the children: the rule applied there is a local rule. Hence if no basic node occurred between c(x) and x then Δ_x would be strictly smaller than Δ_{c(x)}, contradicting Δ_x = Δ_{c(x)}.

theorem QuasiTab.at?_in_typeOneNode {Δ : Sequent} {next : List QuasiTab} {t : List } {n : QuasiTab} (h : (QNode Typ.one Δ [QNode Typ.two Δ [QNode Typ.three Δ next]]).at? t = some n) :
t = [] t = [0] t = [0, 0] ∃ (i : ) (t' : List ) (hi : i < next.length), t = 0 :: 0 :: i :: t' next[i].at? t' = some n

The possible addresses inside a node of type 1 that is not a leaf: the node itself, its child of type 2, its grandchild of type 3, or an address inside one of the subtrees below the node of type 3.

Helper lemmas about prefixes #

theorem prefix_sandwich {α : Type u_1} {x c u : List α} (h1 : x <+: c) (h2 : c <+: x ++ u) :
∃ (s : List α), s <+: u c = x ++ s

If x is a prefix of c and c is a prefix of x ++ u then c = x ++ s for a prefix s of u.

theorem length_lt_of_mem_inits_dropLast {α : Type u_1} {x z : List α} :
theorem prefix_ne_of_mem_inits_dropLast {α : Type u_1} {x z : List α} (h : z x.inits.dropLast) :
z <+: x z x

The addresses searched by QuasiTab.companion? are the proper prefixes.

theorem QuasiTab.companion?_spec {q : QuasiTab} {z c : List } (h : q.companion? z = some c) :

The companion of a repeat leaf is a proper ancestor with the same label and type 1.

theorem LoadedCluster.measure_le_or_basicBetween {X : Sequent} {tab : Tableau [] X} (C : LoadedCluster tab) (hm : ΔC.lambdaTwo, ¬Δ.basicYC.stepOf Δ, lt_Sequent Y Δ) (Hist : List Sequent) (Δ : Sequent) (x : List ) :
C.Q.at? x = some (QuasiTab.build C.lambdaTwo C.stepOfL Hist Δ)∀ (t : List ) (n : QuasiTab), (QuasiTab.build C.lambdaTwo C.stepOfL Hist Δ).at? t = some n → (n.label = Δ lt_Sequent n.label Δ) C.Q.BasicBetween x (x ++ t)

Along the subtree of a node of type 1 the measure of the label does not increase, unless a node of type 3 with a basic label is passed on the way.

theorem LoadedCluster.build_repeat_basicBetween {X : Sequent} {tab : Tableau [] X} (C : LoadedCluster tab) (hm : ΔC.lambdaTwo, ¬Δ.basicYC.stepOf Δ, lt_Sequent Y Δ) (Hist : List Sequent) (Δ : Sequent) (x : List ) :
C.Q.at? x = some (QuasiTab.build C.lambdaTwo C.stepOfL Hist Δ)∀ (z c : List ), x <+: zC.Q.isRepeatLeaf z = trueC.Q.companion? z = some cx <+: cC.Q.BasicBetween c z

Lemma 10.6, by induction along the construction of the quasi-tableau: if z is a repeat with companion c then there is a node of type 3 with a basic label between c and z.

theorem LoadedCluster.repeat_basicBetween {X : Sequent} {tab : Tableau [] X} (C : LoadedCluster tab) (hm : ΔC.lambdaTwo, ¬Δ.basicYC.stepOf Δ, lt_Sequent Y Δ) {z c : List } (hz : C.Q.isRepeatLeaf z = true) (hc : C.Q.companion? z = some c) :

Lemma 10.6: if z is a repeat in Q with companion c(z), then the path from c(z) to z passes through a node of type 3 whose label is basic.

The proof in the paper argues that a repeat is of type 1, and that in Q a node of type 1 can only succeed a node of type 3 with a basic label. In the construction of Q (Definition 9.8) the children of a node of type 3 are of type 1 also when the label is not basic, so that argument does not apply directly. We use instead that the labels of the successors of a non-basic node are smaller in some measure m, so a repeat — which has the same label as its companion — cannot be reached from its companion by non-basic steps only.

Assumptions about the steps of the quasi-tableau #

Just like LoadedCluster.PaperFacts for Lemma 10.3, the proof of Lemma 10.7 uses facts about the tableau tab and the sequents Λ₂[C] that are not (yet) available in this Lean development. They are collected here in one record.

structure LoadedCluster.SatDownFacts {X : Sequent} {tab : Tableau [] X} (C : LoadedCluster tab) :

Facts about the cluster C used in the proof of Lemma 10.7.

  • rightLoaded says that all Δ ∈ Λ₂[C] carry their loaded formula on the right; this is the standing assumption of Section 9 that Γ₂ is the loaded side.
  • stepLT provides a decreasing measure needed for Lemma 10.6 (repeat_basicBetween). A local rule applied to an unloaded formula, or the rule (◇)₂ applied to the loaded formula, strictly decreases the DM ordering on sequents.
  • basicStep describes the modal step at a basic Δ ∈ Λ₂[C]: there is exactly one successor sequent Y, obtained by projecting along the leading atomic program a of the loaded formula and dropping a from it.
  • nonBasicStep describes the local step at a non-basic Δ ∈ Λ₂[C]: whenever Δ holds at a state, one of the successor sequents holds at the same state, with the same witness distance. In the paper this is proved by a case distinction on whether the rule was applied to an unloaded formula (local invertibility) or to the loaded formula (in which case it is Lemma 10.5(h), existsD_of_true_diamond).
Instances For

    The claim in the proof of Lemma 10.7 #

    def LoadedCluster.SatDown {X : Sequent} {tab : Tableau [] X} (C : LoadedCluster tab) (θ : FinePathIn tabFormula) (x : List ) :

    The Claim in the proof of Lemma 10.7, for the node x of the quasi-tableau: whenever Δ_x, ι_x is satisfied at a state v, there is a repeat leaf z ∈ cycs(x) and a state u satisfying Δ_z, ι_z with a witness distance that is not larger, and that is strictly smaller if there is a basic node between x and z.

    The internal variables of the pre-interpolants are interpreted by an assignment g; see the module docstring.

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

      The cases of the proof of the Claim #

      theorem LoadedCluster.satDown_one_leaf_repeat {X : Sequent} {tab : Tableau [] X} {C : LoadedCluster tab} {x : List } {θ : FinePathIn tabFormula} {Δ : Sequent} {c : List } (hx : C.Q.at? x = some (QuasiTab.QNode Typ.one Δ [])) (hc : C.Q.companion? x = some c) :
      C.SatDown θ x

      Case k(x) = 1 where x is a repeat leaf: take z := x and u := v.

      theorem LoadedCluster.satDown_one_leaf_exit {X : Sequent} {tab : Tableau [] X} {C : LoadedCluster tab} {x : List } {θ : FinePathIn tabFormula} {Δ : Sequent} (hx : C.Q.at? x = some (QuasiTab.QNode Typ.one Δ [])) (hc : C.Q.companion? x = none) ( : fC.fineExits, isPartInterpolant f.label (θ f)) :
      C.SatDown θ x

      Case k(x) = 1 where x is a leaf that is not a repeat: here ι_x = θ_{Δ_x} and the sequent Δ_x, ι_x is unsatisfiable by Lemma 9.14 (b), so the claim is vacuous.

      theorem LoadedCluster.satDown_one_inner {X : Sequent} {tab : Tableau [] X} {C : LoadedCluster tab} {x : List } {θ : FinePathIn tabFormula} {Δ : Sequent} {y : QuasiTab} {ys : List QuasiTab} (hx : C.Q.at? x = some (QuasiTab.QNode Typ.one Δ (y :: ys))) (hcomp : xC.Q.companions) (hylab : C.Q.labelAt (x ++ [0]) = some Δ) (IH : C.SatDown θ (x ++ [0])) :
      C.SatDown θ x

      Case k(x) = 1 where x is neither a leaf nor a companion: ι_x = ι_y and Δ_x = Δ_y for the unique child y, and cycs(x) = cycs(y).

      theorem LoadedCluster.satDown_two {X : Sequent} {tab : Tableau [] X} {C : LoadedCluster tab} {x : List } {θ : FinePathIn tabFormula} {Δ : Sequent} {y : QuasiTab} {ys : List QuasiTab} (hx : C.Q.at? x = some (QuasiTab.QNode Typ.two Δ (y :: ys))) (hylab : C.Q.labelAt (x ++ [0]) = some Δ) ( : fC.fineExits, isPartInterpolant f.label (θ f)) (IH : C.SatDown θ (x ++ [0])) :
      C.SatDown θ x

      Case k(x) = 2: ι_x = [¬θ_Δ?]ι_y, and Δ, θ_Δ is unsatisfiable by Lemma 9.14 (b), so ι_y holds at the same state.

      theorem LoadedCluster.satDown_three_basic {X : Sequent} {tab : Tableau [] X} {C : LoadedCluster tab} {x : List } {θ : FinePathIn tabFormula} {Δ Y : Sequent} {y : QuasiTab} {ys : List QuasiTab} (hS : C.SatDownFacts) ( : Δ C.lambdaTwo) (hb : Δ.basic) (hx : C.Q.at? x = some (QuasiTab.QNode Typ.three Δ (y :: ys))) (hstep : C.stepOf Δ = {Y}) (hylab : C.Q.labelAt (x ++ [0]) = some Y) (IH : C.SatDown θ (x ++ [0])) :
      C.SatDown θ x

      Case k(x) = 3 with Δ_x basic: the loaded formula is ¬⌊a γ⃗⌋ψ with a atomic and ι_x = [a]ι_y. Going to a state v' at minimal witness distance decreases the witness distance by exactly one.

      theorem LoadedCluster.satDown_three_not_basic {X : Sequent} {tab : Tableau [] X} {C : LoadedCluster tab} {x : List } {θ : FinePathIn tabFormula} {Δ : Sequent} {next : List QuasiTab} (hS : C.SatDownFacts) ( : Δ C.lambdaTwo) (hb : ¬Δ.basic) (hx : C.Q.at? x = some (QuasiTab.QNode Typ.three Δ next)) (hlen : next.length = (C.stepOfL Δ).length) (hlab : ∀ (i : ) (hi : i < (C.stepOfL Δ).length), C.Q.labelAt (x ++ [i]) = some (C.stepOfL Δ)[i]) (IH : i < next.length, C.SatDown θ (x ++ [i])) :
      C.SatDown θ x

      Case k(x) = 3 with Δ_x not basic: ι_x = ⋀ᵢ ι_{y_i} and by SatDownFacts.nonBasicStep one of the children holds at the same state with the same witness distance.

      theorem LoadedCluster.satDown_one_companion {X : Sequent} {tab : Tableau [] X} {C : LoadedCluster tab} {x : List } {θ : FinePathIn tabFormula} {Δ : Sequent} {y : QuasiTab} {ys : List QuasiTab} (hS : C.SatDownFacts) (hx : C.Q.at? x = some (QuasiTab.QNode Typ.one Δ (y :: ys))) (hcomp : x C.Q.companions) (hylab : C.Q.labelAt (x ++ [0]) = some Δ) (IH : C.SatDown θ (x ++ [0])) :
      C.SatDown θ x

      Case k(x) = 1 where x is a companion: ι_x = gfp x ι_y. Reinterpreting the internal variable q_x by ι_x turns ι_x into ι_y, and a repeat z ∈ cycs(y) whose companion is x itself sends us back to x, but with a strictly smaller witness distance by Lemma 10.6, so the secondary induction applies.

      The Claim for all nodes of the quasi-tableau #

      theorem LoadedCluster.satDown_build {X : Sequent} {tab : Tableau [] X} {θ : FinePathIn tabFormula} (C : LoadedCluster tab) (hS : C.SatDownFacts) ( : fC.fineExits, isPartInterpolant f.label (θ f)) (Hist : List Sequent) (Δ : Sequent) (x : List ) :
      C.Q.at? x = some (QuasiTab.build C.lambdaTwo C.stepOfL Hist Δ)C.SatDown θ x

      The Claim in the proof of Lemma 10.7, for all nodes of the quasi-tableau, by leaf-to-root induction along the construction of Q (Definition 9.8).

      theorem LoadedCluster.satDown_root {X : Sequent} {tab : Tableau [] X} {θ : FinePathIn tabFormula} (C : LoadedCluster tab) (hS : C.SatDownFacts) ( : fC.fineExits, isPartInterpolant f.label (θ f)) :

      Lemma 10.7 at the root of the quasi-tableau.

      Lemma 10.8 #

      theorem LoadedCluster.right_unsat_itp {X : Sequent} {tab : Tableau [] X} {θ : FinePathIn tabFormula} (C : LoadedCluster tab) (hS : C.SatDownFacts) ( : fC.fineExits, isPartInterpolant f.label (θ f)) (hΓ₁ : (nodeAt C.root).left ) :

      Lemma 10.8: Γ₂ ⊨ ¬θ_r, i.e. the right component of the root of the cluster together with the interpolant of Definition 9.20 is unsatisfiable.

      The hypothesis Γ₁ ≠ ∅ is the one of Definition 9.20: for Γ₁ = ∅ we have θ_r = ⊤ by Remark 9.19, and then the statement would say that Γ₂ itself is unsatisfiable.