Pre-interpolants (Definition 9.18) #
Given the quasi-tableau Q of the cluster C (Def 9.8, LoadedCluster.Q) and the
formulas θ_Δ of Def 9.13 (LoadedCluster.thetaOf), we define by a leaf-to-root
induction a pre-interpolant ι_x for every node x of Q.
As in Pdl.InterpolationCluster a node of the quasi-tableau is given by its address,
the list of child indices leading to it from the root. Hence the internal variables q_x
for x ∈ K_Q are indexed by List Nat, and pre-interpolants are elements of
QFormula (List Nat), the Q-formulas of Def 9.15.
The definition proceeds by recursion on the subtree, carrying along the address of its
root; the address is needed to look up the companion c(x) and to decide whether x is
itself a companion. Two cases of the definition presuppose facts about the quasi-tableau
that are not part of the data type, namely that nodes of type 2 and basic nodes of type 3
have a unique child. For nodes without children where the paper assumes one we return the
placeholder ⊤; by Remark 9.9 (QuasiTab.build_leaf_typ) this does not happen in C.Q.
The leading program of the loaded formula #
The leading program α of the loaded formula ~⌊α⌋ξ of a sequent, if there is one.
For a basic sequent this program is atomic, see
Sequent.isAtomic_of_basic_of_negLoad_mem_wForms.
Equations
Instances For
The leading program of the loaded formula, or ?'⊥ if the sequent is free.
Only used in the case k(x) = 3 with Δₓ basic of Definition 9.18, where the sequent
is loaded.
Equations
- X.loadedProg = X.loadedProg?.getD (?'⊥)
Instances For
Definition 9.18 #
Def 9.18: the pre-interpolant ι_x of the node with address x in the quasi-tableau
q, where θ gives the formulas θ_Δ of Def 9.13.
The first argument q is the whole quasi-tableau (used to find companions), the argument
n is the subtree at address x, on which we recurse.
k(x) = 1andxis a leaf: ifxis a repeat, i.e. has a companionc(x), thenι_x := q_{c(x)}; otherwiseΔ_x ∈ Λ₂[C⁺] \ Λ₂[C]andι_x := θ_{Δ_x}.k(x) = 1andxis a companion:ι_xis the fixpointQFormula.gfp x ι_ywhereyis the unique child ofx.k(x) = 1otherwise:ι_x := ι_yfor the unique childy.k(x) = 2:ι_x := [¬θ_{Δ_x}?] ι_yfor the unique childy.k(x) = 3withΔ_xbasic:ι_x := [a] ι_ywhereais the leading atomic program of the loaded formula ofΔ_x.k(x) = 3withΔ_xnot basic:ι_x := ⋀ { ι_y | x ⋖Q y }.
Equations
- q.iitpAt θ (QuasiTab.QNode Typ.one Δ []) x✝ = match q.companion? x✝ with | some c => QFormula.var c | none => QFormula.fma (θ Δ)
- q.iitpAt θ (QuasiTab.QNode Typ.one Δ (y :: tail)) x✝ = if x✝ ∈ q.companions then QFormula.gfp x✝ (q.iitpAt θ y (x✝ ++ [0])) else q.iitpAt θ y (x✝ ++ [0])
- q.iitpAt θ (QuasiTab.QNode Typ.two Δ (y :: tail)) x✝ = QFormula.boxes [?'~θ Δ] (q.iitpAt θ y (x✝ ++ [0]))
- q.iitpAt θ (QuasiTab.QNode Typ.two Δ []) x✝ = QFormula.fma ⊤
- q.iitpAt θ (QuasiTab.QNode Typ.three Δ []) x✝ = if Δ.basic then QFormula.fma ⊤ else QFormula.conj (q.iitpList θ [] x✝ 0)
- q.iitpAt θ (QuasiTab.QNode Typ.three Δ (y :: tail)) x✝ = if Δ.basic then QFormula.boxes [Δ.loadedProg] (q.iitpAt θ y (x✝ ++ [0])) else QFormula.conj (q.iitpList θ (y :: tail) x✝ 0)
Instances For
Def 9.18: the pre-interpolant ι_x of the node with address x of the quasi-tableau
Q of the cluster C, where θ gives the interpolants of the exit nodes of C.
When there is no node at address x we return the placeholder ⊤.
Equations
Instances For
The pre-interpolant of the root of the quasi-tableau. This is the formula ι_{c_Q}
that Def 9.20 turns into the interpolant of the root of the cluster.
Equations
- C.rootIitp θ = C.iitp θ QuasiTab.rootAddress
Instances For
Unfolding lemmas for Definition 9.18 #
Unfolding Definition 9.18 at the level of addresses #
The lemmas above are about the recursion on subtrees. Here we restate them for the
pre-interpolants LoadedCluster.iitp of the nodes of Q, which are given by addresses.
The pre-interpolant of the first child of a node.
Def 9.18, case k(x) = 1 where x is a repeat leaf: ι_x = q_{c(x)}.
Def 9.18, case k(x) = 1 where x is a leaf that is not a repeat: ι_x = θ_{Δ_x}.
Def 9.18, case k(x) = 1 where x is a companion: ι_x is the fixpoint.
Def 9.18, case k(x) = 1 where x is neither a leaf nor a companion: ι_x = ι_y.
Def 9.18, case k(x) = 3 with Δ_x basic: ι_x = [a] ι_y.
Def 9.18, case k(x) = 3 with Δ_x not basic: ι_x is the conjunction of the
pre-interpolants of all children of x, see iitpList_getElem_eq_iitp.
The conjuncts in the case k(x) = 3 with Δ_x not basic are indeed the
pre-interpolants of the children of x.