Documentation

DescriptiveComplexity.Problems.Qsat.Interp

The interpretation of the Savitch reduction #

The defining formulas of the reduction of SUCCINCT-REACH to QSAT, and the resulting first-order interpretation DescriptiveComplexity.qsatInterp, of dimension 2 over the ordered expansion of FirstOrder.Language.transSys.

Every relation of FirstOrder.Language.qsat is defined by a formula that only depends on the tags of its arguments, and each of those formulas is read off the tables of DescriptiveComplexity.Problems.Qsat.Tags:

The section “Characterization of the interpreted relations” reads each of them back through DescriptiveComplexity.FOInterpretation.relMap_map; those lemmas are the only interface the correctness proof uses.

The formula builders of the reduction #

They live in their own namespace: short names like leF or occF are what every reduction of the library calls its builders, and the umbrella DescriptiveComplexity.Problems imports them all at once.

@[reducible, inline]

The ordered expansion of the vocabulary of transition systems: the source vocabulary of the reduction.

Equations
Instances For
    Dependency graph
    @[reducible, inline]

    The symbol for “is a state variable”, in the ordered expansion.

    Equations
    Instances For
      Dependency graph
      @[reducible, inline]

      The symbol for “is a source clause”, in the ordered expansion.

      Equations
      Instances For
        Dependency graph
        @[reducible, inline]

        The symbol for “is a target clause”, in the ordered expansion.

        Equations
        Instances For
          Dependency graph
          @[reducible, inline]

          The symbol for “is a transition clause”, in the ordered expansion.

          Equations
          Instances For
            Dependency graph
            @[reducible, inline]

            The symbol for “is the next-state copy of”, in the ordered expansion.

            Equations
            Instances For
              Dependency graph
              @[reducible, inline]

              The symbol for “occurs positively in”, in the ordered expansion.

              Equations
              Instances For
                Dependency graph
                @[reducible, inline]

                The symbol for “occurs negatively in”, in the ordered expansion.

                Equations
                Instances For
                  Dependency graph

                  Atomic formula builders #

                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  noncomputable def DescriptiveComplexity.QsatRed.isBotF {α : Type} (x : α) :

                  x is a minimum of the input order, as a formula.

                  Equations
                  Instances For
                    Dependency graph
                    noncomputable def DescriptiveComplexity.QsatRed.minSVF {α : Type} (x : α) :

                    x is the first state variable, as a formula.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      Dependency graph
                      noncomputable def DescriptiveComplexity.QsatRed.maxSVF {α : Type} (x : α) :

                      x is the last state variable, as a formula.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        Dependency graph
                        noncomputable def DescriptiveComplexity.QsatRed.predSVF {α : Type} (x y : α) :

                        x is the state variable just above the state variable y, as a formula.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          Dependency graph

                          Realization of the atomic builders #

                          @[simp]
                          Dependency graph
                          Dependency graph
                          Dependency graph
                          Dependency graph
                          Dependency graph
                          Dependency graph
                          Dependency graph
                          @[simp]
                          theorem DescriptiveComplexity.QsatRed.realize_leF {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {α : Type} {V : αA} {x y : α} :
                          (leF x y).Realize V V x V y
                          Dependency graph
                          @[simp]
                          theorem DescriptiveComplexity.QsatRed.realize_eqF {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {α : Type} {V : αA} {x y : α} :
                          (eqF x y).Realize V V x = V y
                          Dependency graph
                          @[simp]
                          theorem DescriptiveComplexity.QsatRed.realize_ltF {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {α : Type} {V : αA} {x y : α} :
                          (ltF x y).Realize V V x < V y
                          Dependency graph
                          Dependency graph
                          Dependency graph
                          Dependency graph
                          @[simp]
                          theorem DescriptiveComplexity.QsatRed.realize_predSVF {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {α : Type} {V : αA} {x y : α} :
                          (predSVF x y).Realize V IsPredSV (V x) (V y)
                          Dependency graph

                          The defining formulas #

                          noncomputable def DescriptiveComplexity.QsatRed.varF {α : Type} :
                          QVarTagααtransOrd.Formula α

                          The mark of a variable tag, as a formula in its two coordinates.

                          Equations
                          Instances For
                            Dependency graph
                            noncomputable def DescriptiveComplexity.QsatRed.clF {α : Type} :
                            QClTagααtransOrd.Formula α

                            The guard of a clause tag, as a formula in its two coordinates.

                            Equations
                            Instances For
                              Dependency graph
                              noncomputable def DescriptiveComplexity.QsatRed.allF {α : Type} (v : QVarTag) (p q : α) :

                              The mark of the universally quantified variables: only the bits b_ℓ.

                              Equations
                              Instances For
                                Dependency graph
                                noncomputable def DescriptiveComplexity.QsatRed.natLexF {α : Type} (a b : ) (φ : transOrd.Formula α) :

                                A static component of a lexicographic comparison decides by itself, unless the two values are equal.

                                Equations
                                Instances For
                                  Dependency graph
                                  theorem DescriptiveComplexity.QsatRed.realize_varF {α A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {V : αA} {v : QVarTag} {p q : α} :
                                  (varF v p q).Realize V QVarOn v (V p) (V q)
                                  Dependency graph
                                  theorem DescriptiveComplexity.QsatRed.realize_allF {α A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {V : αA} {v : QVarTag} {p q : α} :
                                  (allF v p q).Realize V v = QVarTag.sB QVarOn v (V p) (V q)
                                  Dependency graph
                                  theorem DescriptiveComplexity.QsatRed.realize_clF {α A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {V : αA} {c : QClTag} {p q : α} :
                                  (clF c p q).Realize V QClOn c (V p) (V q)
                                  Dependency graph
                                  theorem DescriptiveComplexity.QsatRed.realize_natLexF {α A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {V : αA} {a b : } {φ : transOrd.Formula α} {P : Prop} (h : φ.Realize V P) :
                                  (natLexF a b φ).Realize V a < b a = b P
                                  Dependency graph

                                  The coordinates of a two-argument defining formula #

                                  @[reducible, inline]

                                  The first coordinate of the first argument.

                                  Equations
                                  Instances For
                                    Dependency graph
                                    @[reducible, inline]

                                    The second coordinate of the first argument.

                                    Equations
                                    Instances For
                                      Dependency graph
                                      @[reducible, inline]

                                      The first coordinate of the second argument.

                                      Equations
                                      Instances For
                                        Dependency graph
                                        @[reducible, inline]

                                        The second coordinate of the second argument.

                                        Equations
                                        Instances For
                                          Dependency graph

                                          Where a literal's variable sits, as a formula in the four coordinates.

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            Dependency graph
                                            Dependency graph
                                            noncomputable def DescriptiveComplexity.QsatRed.occF (sgn : Bool) (ct : QClTag) (vt : QVarTag) :

                                            The occurrence formula: the literals of the clause tag ct that are on the variable tag vt with the sign sgn, gathered into a disjunction.

                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For
                                              Dependency graph
                                              theorem DescriptiveComplexity.QsatRed.realize_occF {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {sgn : Bool} {ct : QClTag} {vt : QVarTag} {V : Fin 2 × Fin 2A} :
                                              (occF sgn ct vt).Realize V lqLits ct, l.vt = vt l.sign = sgn QClOn ct (V x₀) (V y₀) QVarOn vt (V x₁) (V y₁) LinkOn l.link (V x₀) (V y₀) (V x₁) (V y₁)
                                              Dependency graph

                                              The prefix formula #

                                              def DescriptiveComplexity.QsatRed.KeyLtRaw {A : Type} [LinearOrder A] (g : ) (l : A) (s : ) (c : A) (o g' : ) (l' : A) (s' : ) (c' : A) (o' : ) :

                                              The lexicographic comparison of two keys, spelled out: the static components decide by themselves, the two dynamic ones by an order atom.

                                              Equations
                                              Instances For
                                                Dependency graph
                                                theorem DescriptiveComplexity.QsatRed.keyLt_iff_raw {A : Type} [LinearOrder A] (v v' : QVarTag) (p q p' q' : A) :
                                                KeyLt v p q v' p' q' KeyLtRaw (keyGrp v) (keyLev v p q) (keySlot v) (keySec v p q) (keyOrd v) (keyGrp v') (keyLev v' p' q') (keySlot v') (keySec v' p' q') (keyOrd v')
                                                Dependency graph
                                                noncomputable def DescriptiveComplexity.QsatRed.keyBodyF (v v' : QVarTag) (lv sc lv' sc' : Fin 2 × Fin 2) :

                                                The body of the prefix comparison, with the four coordinates selected.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  Dependency graph
                                                  theorem DescriptiveComplexity.QsatRed.realize_keyBodyF {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] {v v' : QVarTag} {lv sc lv' sc' : Fin 2 × Fin 2} {V : Fin 2 × Fin 2A} :
                                                  (keyBodyF v v' lv sc lv' sc').Realize V KeyLtRaw (keyGrp v) (V lv) (keySlot v) (V sc) (keyOrd v) (keyGrp v') (V lv') (keySlot v') (V sc') (keyOrd v')
                                                  Dependency graph

                                                  The quantifier prefix, as a formula: both arguments are variables, and their keys compare lexicographically.

                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    Dependency graph
                                                    Dependency graph

                                                    The interpretation #

                                                    The Savitch interpretation: the QSAT instance whose prefix and matrix express reachability in the transition system described by the input, by recursive doubling.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      Dependency graph

                                                      Characterization of the interpreted relations #

                                                      @[reducible, inline]

                                                      The universe of the constructed instance: a tag together with a pair of elements of the input.

                                                      Equations
                                                      Instances For
                                                        Dependency graph
                                                        Dependency graph
                                                        Dependency graph

                                                        The variables: the marked tagged pairs.

                                                        Dependency graph

                                                        Elements carrying a clause tag are not variables.

                                                        Dependency graph

                                                        The universal variables: only the bits b_ℓ.

                                                        Dependency graph

                                                        Every variable tag other than sB is existential.

                                                        Dependency graph

                                                        Elements carrying a clause tag are not universal.

                                                        Dependency graph
                                                        Dependency graph
                                                        Dependency graph
                                                        theorem DescriptiveComplexity.qsat_prec {A : Type} [FirstOrder.Language.transSys.Structure A] [LinearOrder A] (v v' : QVarTag) (w w' : Fin 2A) :
                                                        QPrec (Sum.inl v, w) (Sum.inl v', w') QVarOn v (w 0) (w 1) QVarOn v' (w' 0) (w' 1) KeyLt v (w 0) (w 1) v' (w' 0) (w' 1)

                                                        The prefix order relates two variables exactly as their keys compare.

                                                        Dependency graph

                                                        The prefix order does not relate a clause on the left.

                                                        Dependency graph

                                                        The prefix order does not relate a clause on the right.

                                                        Dependency graph

                                                        The positive literals of a clause: the literals of its list that are on the given variable tag with a positive sign, and whose link pins that variable's coordinates.

                                                        Dependency graph

                                                        The negative literals of a clause.

                                                        Dependency graph
                                                        Dependency graph

                                                        No literal is on an element carrying a clause tag, negatively.

                                                        Dependency graph
                                                        Dependency graph

                                                        An element carrying a variable tag has no negative literals.

                                                        Dependency graph