Uniformity of split tableaux (Section 8.1) #
This file defines when a tableau is uniform, by the two conditions U1 and U2 of the
paper, and shows that in a uniform tableau every loaded cluster has the property
LoadedCluster.HasUniformSteps that the construction of the quasi-tableau needs.
Recall the two conditions from the paper, where Λ₁(s) and Λ₂(s) are the left and the
right component of the sequent at the node s, and where i ∈ {1,2}:
- U1. If
Λᵢ(s)is loaded then a local rule is applied to a formula in the unloaded component ofs, unless that component is basic. - U2. If
Λᵢ(s) = Λᵢ(t)is loaded and not basic, and the unloaded components of bothsandtare basic, then atsand attthe same rule is applied, to the same formula in the loaded component of the node.
Both conditions speak about the nodes of the tableau in the sense of the paper, i.e. also
about the nodes inside the local tableaux. Hence we state them for FinePathIn tab.
Note that in U2 the loaded component is not basic, so the rule applied at s and at t
must be a local rule; we therefore phrase U2 using FinePathIn.lra?, and "the same rule
applied to the same formula" becomes LocalRuleApp.SameRuleAs: the two rule applications
have the same principal formulas (Lcond, Rcond and Ocond) and the same results
(ress), and indeed use the same rule (lr).
The main result is LoadedCluster.uniformOfUniTab. Its proof splits into two cases, and
only the second one uses uniformity:
- If
Δis basic then by Lemma 9.7 (e) — hereUniformity.basicModalStep— the rule applied at a node ofC^R_Δis the modal rule(M)for the loaded formula ofΔ, and hence the right component of the unique child only depends onΔ. - If
Δis not basic then the rule applied at a node ofC^R_Δis a local rule acting on the right. By U1 the left component of such a node is basic, so U2 applies and says that the same rule with the same principal formula is used at all these nodes. Since a local rule application only changes the right component by deleting its principal formulas and adding the results, the right components of the children agree — this isUniformity.map_rightOnly_C_eq.
Duplicated helper lemmas #
The file Pdl.ClusterInterpolation imports this file (it uses Tableau.isUniform and
LoadedCluster.uniformOfUniTab), so we cannot use the lemmas about right rules that are
proved there. The section Uniformity below therefore repeats those that are needed here,
under different names.
The components of a sequent #
The left component of a sequent, without any loaded formula. When the loaded formula
is on the right, i.e. in the situation of a LoadedCluster, this is the unloaded
component Λ₁ of the node, and Sequent.leftFree X |>.basic says that no local rule is
applicable to it.
Instances For
Two local rule applications use the same rule with the same principal formulas.
The fields Lcond, Rcond and Ocond are the principal formulas and ress is the list
of results of the rule, so this says that the same rule instance is applied at two nodes,
which may still have different sequents.
Equations
Instances For
Uniformity #
Condition U1: at a node with a loaded component, a rule is applied to the unloaded
component unless the latter is basic. Since every rule is a left rule or a right rule but
not both (FinePathIn.not_left_and_right), we state this as: a rule on the unloaded side
is applied.
The condition is only about nodes at which a rule is applied at all, i.e. we exclude the
leaves given by a loaded-path repeat, which is what ¬ f.base.isLrep says. Note that this
exclusion is needed: at a loaded-path repeat the tableau stops, so no rule at all — and in
particular no rule on the unloaded component — is applied there, while the sequent of a
loaded-path repeat may well have a non-basic unloaded component. (For example, the sequent
reached again after a loop may contain a conjunction on the unloaded side; the tableau is
then forced to stop, because Tableau.loc and Tableau.pdl both require ¬ flprep.)
Without the exclusion no tableau with such a repeat would be uniform, and Tableau.toUniform
would fail.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Condition U2: two nodes whose loaded component is the same and not basic, and whose
unloaded components are both basic, apply the same rule to the same formula of the loaded
component. As the loaded component is not basic the rule must be a local one, so we may
state this for the local rule applications f.lra? and g.lra?.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A sanity check that U1 and U2 are not contradictory: both conditions only constrain nodes with a loaded component, so a tableau in which no node is loaded satisfies them.
A tableau is uniform if it satisfies the conditions U1 and U2.
We also demand U1 and U2 for the flipped tableau tab.flip, in which the left and the
right components of all sequents are swapped. This is not an extra demand: U1 and U2 are
symmetric in the two components, so tab.UniCore and tab.flip.UniCore say the same
thing. Asking for both here only spares us the purely technical work of transporting U1
and U2 along Tableau.flip, which would need a flip operation on FinePathIn.
What it buys us is Tableau.isUniform.flip below, which is needed because the
interpolation proof flips the tableau when the loaded formula is on the left.
Instances For
Uniform tableaux by construction #
To obtain uniform tableaux we follow approach (B): instead of repairing a given tableau we
describe how a uniform one is built, by fixing which local rule is applied at each node.
The conditions U1 and U2 only speak about the local rules applied at the nodes, and both are
conditions that can be read off a single rule application together with the sequent it is
applied to. This is what LocalRuleApp.IsUniChoice below says:
- the rule is applied to the unloaded component, unless that component is basic (U1); and
- if it is applied to the loaded component (the unloaded one then being basic) then it is
the canonical rule for that component, given by
uniRightChoiceresp.uniLeftChoice.
Since the canonical rule only depends on the loaded component Λᵢ(s), any two nodes with
the same loaded component use the same rule, which is U2. A tableau all of whose rule
applications are IsUniChoice is called Tableau.IsUni, and Tableau.IsUni.uniCore shows
that such a tableau indeed satisfies U1 and U2. The construction is symmetric under flipping
(Tableau.IsUni.flip), which gives the second half of Tableau.isUniform.
Flipping components, rules and rule applications #
Being the same rule is preserved by flipping.
Being the same rule is reflexive.
Being the same rule is symmetric.
Being the same rule is transitive.
The canonical rule for a component #
The canonical local rule to be applied to the right component of a sequent.
We use the first right rule in the list LocalRuleApp.all of all applicable rules.
Which rule exactly is picked does not matter for uniformity; all that matters is that
this is a function of the sequent — and that it is applied to sequents of the form
X.rightOnly, so that it only depends on the right component.
Equations
- uniRightChoice Y = List.find? (fun (lra : LocalRuleApp) => lra.isRightRule) (LocalRuleApp.all Y)
Instances For
The canonical local rule to be applied to the left component of a sequent.
Defined as the flip of uniRightChoice, which makes the whole construction symmetric.
Equations
Instances For
Uniform rule applications #
The conditions on a single local rule application in a uniform tableau: the first two fields are the local form of U1 and the last two are the local form of U2.
If loaded on the right and the left component is not basic, a left rule is applied.
If loaded on the left and the right component is not basic, a right rule is applied.
- rightCanon : lra.isRightRule = true → lra.X.2.2.isRight → lra.X.leftFree.basic → ∃ (lrb : LocalRuleApp), uniRightChoice lra.X.rightOnly = some lrb ∧ lra.SameRuleAs lrb
A right rule applied at a node loaded on the right whose left component is basic is the canonical rule for the right component.
- leftCanon : lra.isLeftRule = true → lra.X.2.2.isLeft → lra.X.rightFree.basic → ∃ (lrb : LocalRuleApp), uniLeftChoice lra.X.leftOnly = some lrb ∧ lra.SameRuleAs lrb
A left rule applied at a node loaded on the left whose right component is basic is the canonical rule for the left component.
Instances For
The conditions on rule applications are symmetric under flipping.
Basic sequents have basic components #
All local rule applications inside a local tableau are uniform choices.
Equations
- (LocalTableau.sim a).IsUni = True
- (LocalTableau.byLocalRule lra X_def next).IsUni = (lra.IsUniChoice ∧ ∀ (Y : Sequent) (h : Y ∈ lra.C), (next Y h).IsUni)
Instances For
All local rule applications inside a tableau are uniform choices.
Equations
- (Tableau.loc nflprep nbas lt next).IsUni = (lt.IsUni ∧ ∀ (Y : Sequent) (h : Y ∈ endNodesOf lt), (next Y h).IsUni)
- (Tableau.pdl nflprep bas r next).IsUni = next.IsUni
- (Tableau.lrep lpr).IsUni = True
Instances For
Building a uniform tableau #
We now show Tableau.exists_isUni: for every tableau there is one that applies the rules in
the canonical order. The construction is deterministic: uniChoiceAt picks, at each sequent,
the canonical rule application (first a rule for the unloaded component, and once that is
basic the canonical rule for the loaded component), and uniLocalTab iterates this to a
local tableau all of whose rule applications are uniform choices (uniLocalTab_isUni).
Given an arbitrary tableau we then re-build it, replacing the local tableau at each loc
step by the canonical one. Because the end nodes of the canonical local tableau need not be
literally the same lists as the end nodes of the original one, we prove the statement in the
more flexible form Tableau.exists_isUni_of_msEq, allowing the sequent and the history to
change up to Sequent.multisetEqTo, i.e. up to permutation of the two lists in a sequent.
That the calculus does not care about such permutations is PdlRule.exists_of_multisetEqTo
and lpr_of_multisetEqTo.
The only step that is left open is uniLocalTab_endNode_dominated.
Put a local rule application into a different context, keeping the rule itself.
Equations
Instances For
Put a local rule application into the context of the sequent X, if possible.
Equations
Instances For
Shapes of left and right rules #
Moving rules between a sequent and its components #
When is the canonical choice available? #
The canonical rule choice #
The canonical rule application for a sequent that is free or loaded on the right: first reduce the left component, then use the canonical rule for the right component.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The canonical local rule application at a sequent: when the sequent is loaded on the
left we flip, use uniChoiceRL and flip back.
Equations
- uniChoiceAt X = if X.2.2.isLeft then Option.map LocalRuleApp.flip (uniChoiceRL X.flip) else uniChoiceRL X
Instances For
The canonical local tableau: always apply the canonical rule uniChoiceAt.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Refutable sequents #
To show that the local development of a sequent does not depend on the order in which the rules are applied we have to deal with clashes: one local tableau may close a branch with a closure rule while another one first decomposes the two clashing formulas. So we need to know that a clash cannot get lost, i.e. that after applying any local rule to a closed sequent the resulting sequents can still be closed.
We call a sequent Refutable if it has a local tableau without any end nodes. Note that we
only ask for the existence of such a local tableau; this is all that is needed below, and
it can be shown by purely syntactic means: the interesting case is when the rule applied is
the box or the diamond unfolding for the two clashing formulas ⌈α⌉ψ and ~⌈α⌉ψ. There
the branches of unfoldBox and of unfoldDiamond clash pairwise, either on a test or on a
formula ⌈⌈δ⌉⌉ψ, which is Dset_mem_P_of_tests below.
Refutable and dominated sequents #
The sequent W is dominated by the finite set Ys if it has a local tableau all of
whose end nodes occur in Ys.
Equations
- W.DominatedBy Ys = ∃ (lt : LocalTableau W), ∀ Y ∈ endNodesOf lt, Y ∈ Ys
Instances For
A sequent is refutable if it has a local tableau without any end nodes.
Equations
- X.Refutable = X.DominatedBy ∅
Instances For
If all children of a rule application are dominated by Ys then so is the sequent.
A closed sequent is refutable: a closure rule can be applied to it.
Clashes survive the application of a rule #
The next lemmas say that a clash in a sequent cannot be lost by applying a local rule: the results are again refutable. The interesting cases are those where the rule is applied to one of the two clashing formulas.
To show that X is refutable it suffices to apply a one-sided rule to a formula p of
X and to refute all the results. The resulting sequents are only described by two
properties, so that we do not have to care about which of the two components p is in:
all formulas of X other than p are still present, and the result of the rule was added.
Two formulas of different length are different.
Two formulas of different length are different.
Tests are shorter than the program they occur in.
A list of boxes in front of a short formula is not the negation of a longer one.
The branches of the box unfolding and of the diamond unfolding clash.
Given a test profile ℓ and a pair (Fs, δ) ∈ Dset α, the two lists Bset α ℓ ψ and
Yset (Fs, δ) ψ contain a formula and its negation: either the two disagree about a test,
or δ ∈ P α ℓ and then ⌈⌈δ⌉⌉ψ is in the first and ~⌈⌈δ⌉⌉ψ is in the second list.
A clash survives a one-sided rule. If X is closed and W is obtained from X by
removing the principal formula p of a one-sided rule and adding one of its results, then
W is refutable.
A clash survives any local rule: every child of a rule application to a closed sequent is refutable.
Closure rules #
A local rule has no results if and only if it is one of the closure rules. For the direction we need here we must know that the box and diamond unfoldings are never empty.
A rule without results is a closure rule, so the sequent it is applied to is closed.
The shape of a rule application that is not a closure rule: it has exactly one principal formula, in the left component, in the right component, or the loaded formula.
A loaded rule can only be applied when its condition is the loaded formula present.
A rule can be applied at any sequent that satisfies its precondition.
A local tableau for a basic sequent has that sequent as its only end node.
Helpers #
These are copies of results in Pdl.ClusterInterpolation, which are not available here
because that file imports this one.
The right component of a basic sequent is basic.
Same as Sequent.basic_rightOnly in Pdl.ClusterInterpolation.
A right local rule cannot be applied when the right component of the sequent is basic.
Same as LocalRuleApp.not_rightOnly_basic_of_isRightRule in Pdl.ClusterInterpolation.
Where a right rule is applied, it is either a local rule or the node is basic.
Same as FinePathIn.lra_or_basic_of_usesRightRule in Pdl.ClusterInterpolation.
The right component of the child obtained by applying the modal rule (M) to a sequent
whose loaded formula ~⌊·A⌋ξ is on the right.
Same as modRChildRightOnly in Pdl.ClusterInterpolation.
Equations
- Uniformity.modRChildRight A (AnyFormula.normal φ) R = (∅, {~φ} ∪ Finset.projection A R, none)
- Uniformity.modRChildRight A (AnyFormula.loaded χ) R = (∅, Finset.projection A R, some (Sum.inr (~'χ)))
Instances For
At a fine node with a basic right component where a right rule is applied, that rule
is one of the three PdlRules acting on the right.
Same as FinePathIn.basicRightStep in Pdl.ClusterInterpolation.
A fine node that is a node in the coarse sense has the label of that coarse node.
Same as FinePathIn.label_eq_nodeAt_base in Pdl.ClusterInterpolation.
If a child of a local rule application is loaded on the right, then so is its premise.
Same as LocalRuleApp.isRight_of_mem_C in Pdl.ClusterInterpolation.
If some end node of a local tableau is loaded on the right, then so is its root.
Same as LocalTableau.isRight_of_mem_endNodesOf in Pdl.ClusterInterpolation.
The end nodes below a local path are end nodes of the local tableau at that path.
Same as LocalPathIn.mem_endNodesOf_ltAt in Pdl.ClusterInterpolation.
A fine node that is not a coarse node and has a coarse child loaded on the right is
itself loaded on the right.
Same as FinePathIn.isRight_of_mem_coarseChildrenBelow in Pdl.ClusterInterpolation.
Lemma 9.4 (a) at the fine level: every fine node of a loaded cluster is loaded on the
right. For a coarse node this is LoadedCluster.all_right_loaded, and for a node inside a
local tableau it follows because that node has a coarse child in the cluster.
Lemma 9.7 (e): at a node t of C^R_Δ with Δ basic the rule applied is the modal
rule (M) for the loaded formula ~⌊·A⌋ξ of Δ, so that the right component of the
unique child of t only depends on Δ.
Same as LoadedCluster.basicModalStepAt in Pdl.ClusterInterpolation.
The key computation for condition U2: if the same local rule with the same principal formulas is applied at two nodes with the same right component, then the right components of the children agree, including their order. This holds because a local rule application deletes the principal formulas from, and adds the results to, the given sequent.
In a uniform tableau any loaded cluster has the property HasUniformSteps needed for
the construction of the quasi-tableau: any two nodes of the cluster with the same right
component Δ at which a right rule is applied have the same right components below them.
The case where Δ is basic does not use uniformity: there the rule applied is the modal
rule for the loaded formula of Δ (Lemma 9.7 (e)). The case where Δ is not basic is
Lemma 9.7 (f), and uses both U1 and U2.