Documentation

DescriptiveComplexity.Problems.Hamilton.Gadget

The Vertex Cover → Hamilton Circuit gadget interpretation #

This file defines the relativized ordered first-order interpretation DescriptiveComplexity.hamInterp that reduces VERTEX COVER (on marked graphs) to (undirected) HAMILTON CIRCUIT (on digraphs read symmetrically), the classical twelve-vertex cover-testing-gadget reduction of Karp 1972, read in the tagged framework.

The output graph hamInterp.MapRel A has these vertices (all carried by a pair of input vertices, dim = 2, cut down by a domain formula – hence a relativized interpretation, DescriptiveComplexity.RelFOInterpretation):

The gadget's edges force, in any Hamilton circuit, one of exactly three traversals of {u, v}: through the u-side, through the v-side, or both – never neither. So each edge is covered, and the number of vertices whose chains are traversed – the cover – is at most the number of selectors, the marked set. This file only builds the interpretation and characterizes its adjacency; the two directions of correctness are in Forward and Reverse.

@[reducible, inline]

The ordered expansion of the marked-graph vocabulary, the source language of the reduction.

Equations
Instances For
    Dependency graph
    @[reducible, inline]

    The adjacency symbol over the ordered expansion of marked graphs.

    Equations
    Instances For
      Dependency graph
      @[reducible, inline]

      The mark symbol over the ordered expansion of marked graphs.

      Equations
      Instances For
        Dependency graph

        Edge and neighbour-order formulas #

        Edge predicate on the input #

        The undirected edge relation on the input: adjacent in some direction, and distinct.

        Equations
        Instances For
          Dependency graph
          Dependency graph

          Realization of the edge and neighbour formulas #

          Dependency graph
          Dependency graph
          theorem DescriptiveComplexity.realize_minNbrF {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] {α : Type} (v : αA) (a b : α) :
          (DescriptiveComplexity.minNbrF✝ a b).Realize v ∀ (d : A), HEdge (v a) dv b d
          Dependency graph
          theorem DescriptiveComplexity.realize_maxNbrF {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] {α : Type} (v : αA) (a b : α) :
          (DescriptiveComplexity.maxNbrF✝ a b).Realize v ∀ (d : A), HEdge (v a) dd v b
          Dependency graph
          theorem DescriptiveComplexity.realize_succNbrF {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] {α : Type} (v : αA) (a b c : α) :
          (DescriptiveComplexity.succNbrF✝ a b c).Realize v HEdge (v a) (v c) v b < v c ∀ (d : A), HEdge (v a) dd v b v c d
          Dependency graph

          The tags and the interpretation #

          The tags of the interpreted structure. Six gadget-node indices (the side, u vs v, is encoded by which endpoint owns the carrying tuple), one selector, one degenerate-case hub. Named constructors, not Fin 8, so the tag match inside the defining formulas reduces definitionally in the characterizations.

          • g0 : HTag

            Gadget node 0: the entrance of a side.

          • g1 : HTag

            Gadget node 1.

          • g2 : HTag

            Gadget node 2.

          • g3 : HTag

            Gadget node 3.

          • g4 : HTag

            Gadget node 4.

          • g5 : HTag

            Gadget node 5: the exit of a side.

          • sel : HTag

            A selector, one per marked vertex.

          • hub : HTag

            The degenerate-case hub.

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

            The reduction of Vertex Cover into Hamilton Circuit: the twelve-vertex cover-testing gadget of each edge, chained along every vertex's neighbour list, with the marked vertices as selectors.

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

              Realization of the degenerate-case guards #

              Dependency graph
              Dependency graph

              The vertices of the interpreted graph #

              The domain formula of a gadget tag says the tuple is an edge.

              Dependency graph
              Dependency graph
              theorem DescriptiveComplexity.dom_hub {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] (w : Fin 2A) :
              (hamInterp.domFormula HTag.hub).Realize w w 0 = w 1 (∀ (a : A), w 0 a) (∀ (y : A), ¬MGMarked y) ∀ (y z : A), ¬HEdge y z
              Dependency graph

              The adjacency of the interpreted graph #

              The intended (symmetric) adjacency of the interpreted graph, on raw tagged tuples: the ten horizontal gadget edges, the four cross edges, the two chain edges, the selector–entrance and selector–exit edges, the selector clique and the hub self-loop. This is exactly what DescriptiveComplexity.hamInterp realizes (DescriptiveComplexity.dgArc_iff).

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

                The adjacency of the interpreted graph: DescriptiveComplexity.hamInterp realizes exactly the intended edges DescriptiveComplexity.IAdjRaw.

                Dependency graph

                The intended adjacency is symmetric: every gadget, chain, selector and hub edge appears in both directions.

                Dependency graph

                DGArc on the interpreted graph is symmetric, so the symmetric reading DescriptiveComplexity.DGEdge used by HAMILTON CIRCUIT coincides with it.

                Dependency graph

                The vertices, as named constructors #

                A gadget vertex ⟨t, (a, b)⟩ for a gadget tag t over an edge (a, b).

                Equations
                Instances For
                  Dependency graph

                  A selector vertex, one per marked input vertex.

                  Equations
                  Instances For
                    Dependency graph
                    def DescriptiveComplexity.hubPt {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] {m : A} (hmin : ∀ (a : A), m a) (hnm : ∀ (y : A), ¬MGMarked y) (hne : ∀ (y z : A), ¬HEdge y z) :

                    The degenerate-case hub vertex.

                    Equations
                    Instances For
                      Dependency graph
                      @[simp]
                      theorem DescriptiveComplexity.gPt_tag {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] (t : HTag) (ht : t HTag.sel t HTag.hub) {a b : A} (h : HEdge a b) :
                      (↑(gPt t ht h)).1 = t
                      Dependency graph
                      @[simp]
                      theorem DescriptiveComplexity.gPt_fst {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] (t : HTag) (ht : t HTag.sel t HTag.hub) {a b : A} (h : HEdge a b) :
                      (↑(gPt t ht h)).2 0 = a
                      Dependency graph
                      @[simp]
                      theorem DescriptiveComplexity.gPt_snd {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] (t : HTag) (ht : t HTag.sel t HTag.hub) {a b : A} (h : HEdge a b) :
                      (↑(gPt t ht h)).2 1 = b
                      Dependency graph
                      Dependency graph
                      Dependency graph
                      theorem DescriptiveComplexity.point_cases {A : Type} [FirstOrder.Language.markedGraph.Structure A] [LinearOrder A] (p : hamInterp.MapRel A) :
                      (∃ (t : HTag) (ht : t HTag.sel t HTag.hub) (h : HEdge ((↑p).2 0) ((↑p).2 1)), p = gPt t ht h) (∃ (h : MGMarked ((↑p).2 0)), (↑p).2 0 = (↑p).2 1 p = selPt h) (↑p).1 = HTag.hub

                      Every vertex of the interpreted graph is a gadget vertex, a selector, or the hub.

                      Dependency graph