Interpolants for proper clusters (Lemma 9.3) #
This file contains the interpolation step for proper clusters: given interpolants for all exit nodes of a cluster, we build an interpolant for the root of the cluster.
The three conditions on the interpolant θ_r := C.itp θ of Definition 9.20 are exactly
LoadedCluster.itp_voc(Lemma 10.1),LoadedCluster.left_unsat_neg_itp(Lemma 10.3), andLoadedCluster.right_unsat_itp(Lemma 10.8).
What this file adds is the interface: the interpolants θ used by those three results
are indexed by the fine exit nodes of the cluster, i.e. also by nodes inside a local
tableau, while clusterInterpolation_right is only given interpolants for the exits in the
coarse PathIn sense. The first half of the file bridges that gap, by pushing the
interpolants of the coarse exits upwards through the local tableaux with
LocalTableau.interpolant.
Flipping Interpolants #
When X is an interpolant for X, then ~θ is an interpolant for X.flip.
Transport an interpolant back from the flipped tableau.
Equations
- ip.unflipPath = ⟨~↑ip, ⋯⟩
Instances For
From the coarse exits to the fine exits #
A fine exit of the cluster is either a coarse node — then it is an exit in the coarse sense and we are given an interpolant for it — or a node inside a local tableau from which the cluster is never re-entered. In the latter case all end nodes of the local tableau below it are coarse exits, and we obtain an interpolant by local interpolation.
Every end node of the local tableau at a local path is an end node of the whole local tableau that is below that path.
A coarse child below a fine node really is a child of the base of that fine node.
A sharpening of FinePathIn.base_of_mem_children: a fine child that lies at a
different coarse node is a coarse node itself.
Local interpolation at fine nodes. If a fine node is not a coarse node, i.e. it
lies properly inside a local tableau, and we have interpolants for all coarse children
below it — these are the end nodes of that local tableau that are reachable from it — then
we have an interpolant for the fine node itself. This is LocalTableau.interpolant applied
to the part of the local tableau below the node.
An interpolant for the label of a fine node, whenever one exists. This is the map θ
on the fine exit nodes that Definitions 9.13 and 9.18 need.
Instances For
Every coarse child below a fine exit of the cluster is a coarse exit of the cluster.
Interpolants for the coarse exits of the cluster give interpolants for all fine exits.
The interpolants of the fine exit nodes of the cluster, given interpolants for the
coarse exits. This is the map θ of Definitions 9.13, 9.18 and 9.20.
Where uniformity is needed #
The facts about a proper cluster that the proofs of Lemmas 10.1, 10.3 and 10.7 use are
proved in Pdl.ClusterFacts and Pdl.ClusterSatDownFacts. All of them follow from
properness of the cluster, which is part of LoadedCluster, except for
LoadedCluster.rightRuleChildren_of_uniform, which also needs uniformity of the tableau
(conditions U1/U2, formalised as LoadedCluster.HasUniformSteps with
LoadedCluster.stepOf_spec, and obtained from tab.isUniform by
LoadedCluster.uniformOfUniTab).
The reason is that C.stepOf Δ reads the right components of the children of the first
node of C^R_Δ, while the facts quantify over all nodes of C^R_Δ:
LoadedCluster.rightRuleChildren_of_uniform(used at non-basic type-3 nodes in the proof of Lemma 10.3) says that for everyt ∈ C^R_Δand everyΠ ∈ stepOf Δthere is a node ofC⁺_Πwith the same left component ast. Its proof takes the children oft, so it needs the right components of those children to be the liststepOf Δ— which for a non-basicΔis preciselystepOf_spec, i.e. uniformity.LoadedCluster.modalStep_ofandLoadedCluster.basicStep_ofalso quantify overt ∈ C^R_Δ, but only for basicΔ. There the rule applied is the modal rule for the unique loaded formula ofΔ(Lemma 9.7 (e)), so the right components of the children are determined byΔalone; this is whatLoadedCluster.basicModalStepAtshows, and it is whymodalStep_ofneeds no uniformity.- The remaining facts (
LoadedCluster.nonBasicStep_of,LoadedCluster.stepOf_lt_Sequent,LoadedCluster.leftPropagation_of_proper,LoadedCluster.exists_right_of_proper, the vocabulary facts) speak aboutΔandstepOf Δonly, or about local invertibility at a single node, and are independent of uniformity.
Interpolants for proper clusters #
Lemma 9.3 for the case where the loaded formula is on the right side:
given interpolants for all exits of the cluster C, interpolate the root of C.
The interpolant is C.itp θ from Definition 9.20, where θ gives the interpolants of the
fine exit nodes, obtained from the given interpolants of the coarse exits by
LoadedCluster.fineExits_itp_spec. Its three defining properties are Lemma 10.1
(itp_voc), Lemma 10.3 (left_unsat_neg_itp) and Lemma 10.8 (right_unsat_itp).
Equations
- clusterInterpolation_right Xfree t_u C exitIPs = ⟨C.itp FinePathIn.itp, ⋯⟩
Instances For
Lemma 9.3: Given a loaded node s that is the first node of its cluster, and given
interpolants for all exits of that cluster, we get an interpolant for s.
Note how s_cr is exactly what is needed to make a LoadedCluster here.
Equations
- One or more equations did not get rendered due to their size.