Documentation

Pdl.Flip

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 clusterInterpolation_right.

def Olf.flip :
OlfOlf
Equations
Instances For
    @[simp]
    theorem Olf.flip_inj {O1 O2 : Olf} :
    O1.flip = O2.flip O1 = O2
    @[simp]
    theorem Olf.flip_flip {O : Olf} :
    O.flip.flip = O
    Equations
    Instances For
      @[simp]
      @[simp]
      @[simp]
      theorem Sequent.flip_flip {X : Sequent} :
      X.flip.flip = X
      theorem Sequent.flip_eq_off {X Y : Sequent} :
      (X.flip = Y) = (X = Y.flip)
      @[simp]
      @[simp]
      theorem basic_flip {X : Sequent} :
      theorem nrep_flip {Hist : History} {X : Sequent} (nrep : ¬rep Hist X) :
      def LocalRule.flip {Lcond Rcond : List Formula} {Ocond : Olf} {ress : List Sequent} (lr : LocalRule (Lcond, Rcond, Ocond) ress) :
      LocalRule (Rcond, Lcond, Ocond.flip) (List.map Sequent.flip ress)
      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        theorem LocalRule.flip_flip {Lcond Rcond : List Formula} {Ocond : Olf} {ress : List Sequent} (lr : LocalRule (Lcond, Rcond, Ocond) ress) :
        lr.flip.flip = lr

        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
          Equations
          Instances For
            theorem LocalTableau.flip_flip {X : Sequent} {lt : LocalTableau X} :
            lt.flip.flip = lt
            theorem LocalTableau.flip_inj {X : Sequent} {lt : LocalTableau X} :
            lt.flip.flip = lt
            theorem exists_flip_of_endNodesOf {X : Sequent} {ltf : LocalTableau X.flip} {Zf : Sequent} :
            Zf endNodesOf ltf∃ (Z : Sequent), Zf = Z.flip Z endNodesOf ltf.flip
            def PdlRule.flip {X Y : Sequent} (r : PdlRule X Y) :
            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem PdlRule.flip_flip {X Y : Sequent} (r : PdlRule X Y) :
              r.flip.flip = r
              theorem LoadedPathRepeat.ext {Hist : History} {X : Sequent} (lprA lprB : LoadedPathRepeat Hist X) :
              lprA = lprBlprA = lprB
              theorem LoadedPathRepeat.flip_flip {Hist : History} {X : Sequent} (lpr : LoadedPathRepeat Hist X) :
              lpr.flip.flip = lpr
              def Tableau.flip {Hist : History} {X : Sequent} :

              (┛ಠ_ಠ)┛彡┻━┻

              Equations
              Instances For
                @[simp]
                @[simp]
                theorem Tableau.flip_flip {Hist : History} {X : Sequent} {tab : Tableau Hist X} :
                tab.flip.flip = tab
                def PathIn.flip {Hist : History} {X : Sequent} {tab : Tableau Hist X} :
                PathIn tabPathIn tab.flip
                Equations
                Instances For
                  theorem PathIn_helper {HistA : History} {XA : Sequent} {HistB : History} {XB : Sequent} {tabA : Tableau HistA XA} {tabB : Tableau HistB XB} (hHist : HistA = HistB) (hX : XA = XB) :
                  tabA = tabBPathIn tabA = PathIn tabB
                  @[simp]
                  theorem PathIn_type_flip_flip {Hist : History} {X : Sequent} {tab : Tableau Hist X} :
                  theorem PathIn.nodeAt_flip {Hist : History} {X : Sequent} {tab : Tableau Hist X} {e : PathIn tab} :
                  theorem flip_aux_eq_mpr_heq {a b : Sort u} (h : a = b) (x : b) :
                  h.mpr x x

                  Eq.mpr is a heterogeneous identity.

                  Flipping a tableau twice gives back (heterogeneously) the original tableau.

                  Flipping a local tableau twice gives back (heterogeneously) the original one.

                  Flipping a pdl rule twice gives back (heterogeneously) the original one.

                  End nodes are invariant under flipping a local tableau twice.

                  theorem PathIn_flip_heq {H1 : History} {X1 : Sequent} {H2 : History} {X2 : Sequent} {t1 : Tableau H1 X1} {t2 : Tableau H2 X2} {p1 : PathIn t1} {p2 : PathIn t2} (hH : H1 = H2) (hX : X1 = X2) (ht : t1 t2) (hp : p1 p2) :
                  p1.flip p2.flip

                  PathIn.flip respects heterogeneous equality of paths.

                  theorem Tableau_flip_heq {H1 : History} {X1 : Sequent} {H2 : History} {X2 : Sequent} {t1 : Tableau H1 X1} {t2 : Tableau H2 X2} (hH : H1 = H2) (hX : X1 = X2) (h : t1 t2) :
                  t1.flip t2.flip

                  Tableau.flip respects heterogeneous equality of tableaux.

                  theorem PathIn.flip_flip {Hist : History} {X : Sequent} {tab : Tableau Hist X} (p : PathIn tab) :
                  p.flip.flip = p

                  Flipping a path twice gives back (after casting along PathIn_type_flip_flip) the original path.