Documentation

DescriptiveComplexity.Problems.MaxCut.Interp

The gadget graph of the reduction from NAE-3SAT to Max Cut #

This file builds the interpretation DescriptiveComplexity.MaxCutInterp.mcInterp of Max Cut instances in ordered CNF instances, and characterizes its two relations. The correctness of the reduction is in DescriptiveComplexity.Problems.MaxCut.Reduction.

The gadget #

Vertices come in three tags over pairs (Fin 2 → A):

and edges in three families:

The threshold marks one pair per element (the variable edge), one pair per occurrence (the occurrence edge), one pair per non-maximal occurrence of a clause (charged against the maximal one, so k − 1 per clause of width k), and one pair per clause with at most one occurrence – a penalty, since such a clause is never not-all-equal satisfiable while its gadget carries no edge at all.

Two design points are worth recording.

Everything is gated on the first-order width check ThreeSatToSat.Wide, as in the reduction of 3SAT to SAT: on a wide input the graph has no edge at all, while the threshold stays positive, so the output is a no-instance. The gate is what makes the per-clause budget k − 1 an upper bound, a clique on k vertices having a larger cut as soon as k ≥ 4.

Tags for the gadget graph: literal vertices, occurrence vertices, and the isolated penalty vertices carrying a threshold unit for degenerate clauses.

  • lit (s : Bool) : MCTag

    litPt s x is the vertex of the literal (x, s).

  • occ (s : Bool) : MCTag

    occPt s c x is the vertex of the occurrence (x, s) of the clause c.

  • pen : MCTag

    penPt c is the isolated penalty vertex of the clause c.

Instances For
    Dependency graph
    Dependency graph
    Dependency graph
    Dependency graph
    Dependency graph

    Two more formulas over the ordered expansion #

    No occurrence of c is a non-first one, as a formula: this says exactly that the clause c has at most one occurrence.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      Dependency graph
      @[simp]
      theorem DescriptiveComplexity.MaxCutInterp.realize_noChainedF {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] {α : Type} {v : αA} {c : α} :
      (noChainedF c).Realize v ∀ (x : A) (s : Bool), ¬SatOcc.Chained (v c) x s
      Dependency graph

      The interpretation #

      Defining formula for adjacency, before the width gate: the three edge families.

      Equations
      Instances For
        Dependency graph

        Defining formula for the threshold marks: one pair per element, one per occurrence, one per non-maximal occurrence, one per degenerate clause.

        Equations
        Instances For
          Dependency graph

          The interpretation of Max Cut instances in ordered CNF instances: the gadget graph, with every edge gated on the width check.

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

            The vertices #

            The literal vertex of (x, s).

            Equations
            Instances For
              Dependency graph

              The occurrence vertex of the occurrence (x, s) of c.

              Equations
              Instances For
                Dependency graph

                The penalty vertex of the clause c.

                Equations
                Instances For
                  Dependency graph
                  theorem DescriptiveComplexity.MaxCutInterp.litPt_eq_iff {A : Type} {s t : Bool} {x y : A} :
                  litPt s x = litPt t y s = t x = y
                  Dependency graph
                  theorem DescriptiveComplexity.MaxCutInterp.occPt_eq_iff {A : Type} {s t : Bool} {c d x y : A} :
                  occPt s c x = occPt t d y s = t c = d x = y
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  @[simp]
                  Dependency graph
                  @[simp]
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  Dependency graph
                  theorem DescriptiveComplexity.MaxCutInterp.litPt_eta {A : Type} {s : Bool} {w : Fin 2A} (h : w 0 = w 1) :
                  (MCTag.lit s, w) = litPt s (w 0)
                  Dependency graph
                  theorem DescriptiveComplexity.MaxCutInterp.occPt_eta {A : Type} {s : Bool} {w : Fin 2A} :
                  (MCTag.occ s, w) = occPt s (w 0) (w 1)
                  Dependency graph
                  theorem DescriptiveComplexity.MaxCutInterp.penPt_eta {A : Type} {w : Fin 2A} (h : w 0 = w 1) :
                  Dependency graph

                  Characterization of the two relations #

                  The shape of an edge, read on tags and coordinates.

                  Equations
                  Instances For
                    Dependency graph

                    The shape of a threshold mark, read on tags and coordinates.

                    Equations
                    Instances For
                      Dependency graph

                      The edges of the gadget graph, on tagged tuples.

                      Dependency graph

                      The threshold marks of the gadget graph, on tagged tuples.

                      Dependency graph
                      theorem DescriptiveComplexity.MaxCutInterp.adj_cases {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] {p q : mcInterp.Map A} (h : MAGAdj p q) :
                      ¬ThreeSatToSat.Wide A ((∃ (s : Bool) (x : A), p = litPt s x q = litPt (!s) x) (∃ (s : Bool) (c : A) (x : A), SatOcc.OccIn c x s p = occPt s c x q = litPt s x) (∃ (s : Bool) (c : A) (x : A), SatOcc.OccIn c x s p = litPt s x q = occPt s c x) ∃ (s : Bool) (t : Bool) (c : A) (x : A) (y : A), SatOcc.OccIn c x s SatOcc.OccIn c y t ¬(x = y s = t) p = occPt s c x q = occPt t c y)

                      Every edge of the gadget graph belongs to one of the three families.

                      Dependency graph
                      theorem DescriptiveComplexity.MaxCutInterp.marked_cases {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] {p q : mcInterp.Map A} (h : MAGMarked p q) :
                      (∃ (x : A), p = litPt true x q = litPt false x) (∃ (s : Bool) (c : A) (x : A), SatOcc.OccIn c x s p = occPt s c x q = litPt s x) (∃ (s : Bool) (t : Bool) (c : A) (x : A) (y : A), SatOcc.OccIn c x s SatOcc.MaxOcc c y t ¬(x = y s = t) p = occPt s c x q = occPt t c y) ∃ (c : A), SatOcc.IsCl c (∀ (x : A) (s : Bool), ¬SatOcc.Chained c x s) p = penPt c q = penPt c

                      Every threshold mark belongs to one of the four families.

                      Dependency graph

                      The variable edge of an element.

                      Dependency graph

                      The edge joining an occurrence vertex to its literal vertex.

                      Dependency graph

                      The edge joining a literal vertex to an occurrence vertex.

                      Dependency graph
                      theorem DescriptiveComplexity.MaxCutInterp.adj_occ_occ {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] (hw : ¬ThreeSatToSat.Wide A) {s t : Bool} {c x y : A} (hx : SatOcc.OccIn c x s) (hy : SatOcc.OccIn c y t) (hne : ¬(x = y s = t)) :
                      MAGAdj (occPt s c x) (occPt t c y)

                      The edges of the gadget of a clause.

                      Dependency graph
                      Dependency graph

                      The threshold mark of an occurrence.

                      Dependency graph
                      theorem DescriptiveComplexity.MaxCutInterp.marked_tri {A : Type} [FirstOrder.Language.sat.Structure A] [LinearOrder A] {s t : Bool} {c x y : A} (hx : SatOcc.OccIn c x s) (hy : SatOcc.MaxOcc c y t) (hne : ¬(x = y s = t)) :
                      MAGMarked (occPt s c x) (occPt t c y)

                      The threshold mark of a non-maximal occurrence, charged against the maximal occurrence of its clause.

                      Dependency graph

                      The penalty mark of a clause with at most one occurrence.

                      Dependency graph