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) — hereLoadedCluster.basicModalStepAt— 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 isLocalRuleApp.SameRuleAs.map_rightOnly_C_eq.
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 this component 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 a uniform tableau we do not try to repair a given tableau, but instead 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 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.
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 local tableau #
We now define uniLocalTab, a tableau 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).
Later the this uniform local tableau is used in Move and gameP_general.
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
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.