Flipping a tableau (for section 7) #
Like the paper, we only prove interpolation for clusters with a loaded formulas on the right side. For the case where the loaded formula is on the left, we flip the tableau left-to-right.
The lemmas here then allow us to prove clusterInterpolation from clusterInterpolationRight.
Exchange the side of an optional loaded formula.
Equations
Instances For
Flipping all sequents in a Finset twice gives back the same set.
Reflect a local rule by exchanging its left and right components.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Note: is it possible and useful to rewrite this in more term and less tactic mode?
Equations
- One or more equations did not get rendered due to their size.
Instances For
Reflect every rule and branch of a local tableau.
Equations
- (PDL.LocalTableau.byLocalRule lra X_def next).flip = PDL.LocalTableau.byLocalRule lra.flip ⋯ fun (Y : PDL.Sequent) (Y_in : Y ∈ lra.flip.C) => ⋯ ▸ (next Y.flip ⋯).flip
- (PDL.LocalTableau.sim Xbas).flip = PDL.LocalTableau.sim ⋯
Instances For
Reflect a loaded-path repeat, preserving its history position.
Instances For
Exchange the left and right sides throughout a tableau.
Equations
- (PDL.Tableau.loc nflprep nbas lt next).flip = PDL.Tableau.loc ⋯ ⋯ lt.flip fun (Y : PDL.Sequent) (Y_in : Y ∈ PDL.endNodesOf lt.flip) => ⋯ ▸ (next Y.flip ⋯).flip
- (PDL.Tableau.pdl nflprep bas r next).flip = PDL.Tableau.pdl ⋯ ⋯ r.flip next.flip
- (PDL.Tableau.lrep lpr).flip = PDL.Tableau.lrep lpr.flip
Instances For
Map a tableau path to the corresponding path in the reflected tableau.
Equations
- PDL.PathIn.nil.flip = PDL.PathIn.nil
- (PDL.PathIn.loc Y_in tail).flip = PDL.PathIn.loc ⋯ (have this := tail.flip; ⋯.mpr this)
- tail.pdl.flip = tail.flip.pdl
Instances For
Flipping a local tableau twice gives back (heterogeneously) the original one.
End nodes are invariant under flipping a local tableau twice.
A child of a loc path is again a loc path with the same first step.
The edge relation only depends on paths up to heterogeneous equality.
The length of a path only depends on it up to heterogeneous equality.
Variant of nil_edge_loc_nil where the tail is only known to have length zero.
Rewinding only depends on the path up to heterogeneous equality, and on the index only via its value.
If a path ends in a loaded-path-repeat, then so does the flipped path, with a repeat at the same position in the history.
Flipping a tableau preserves reachability via ◃.
Flipping a tableau preserves chains of ◃. (Note the ⁺ instead of *.)