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):
litPt s x, the literal vertex of(x, s), on diagonal pairs;occPt s c x, the occurrence vertex of the occurrence(x, s)of the clausec;penPt c, an isolated penalty vertex, used only to carry a threshold unit.
and edges in three families:
litPt s x — litPt (!s) x, one per element of the universe;occPt s c x — litPt s x, one per occurrence;occPt s c x — occPt t c y, for distinct occurrences of the same clause.
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.
- Giving every occurrence its own vertex, joined to its literal vertex by a
single edge, is what makes the three edge families live on disjoint pairs of
tags, hence edge-disjoint: putting the clause gadgets directly on literal
vertices would let two clauses over the same two literals share an edge, and
a clause containing both
xand¬xreuse a variable edge, and the count would break. The occurrence vertex then carries the negation of its literal, which is harmless: not-all-equal satisfaction is invariant under flipping all the literals of a clause. - No edge weight or multiplicity is needed anywhere. The cut splits as a sum over the three families, each maximal on its own, so a single edge per variable already forces the two literal vertices apart.
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 xis the vertex of the literal(x, s). - occ
(s : Bool)
: MCTag
occPt s c xis the vertex of the occurrence(x, s)of the clausec. - pen : MCTag
penPt cis the isolated penalty vertex of the clausec.
Instances For
Dependency graph
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.MaxCutInterp.instDecidableEqMCTag.decEq (DescriptiveComplexity.MaxCutInterp.MCTag.lit s) (DescriptiveComplexity.MaxCutInterp.MCTag.occ s_1) = isFalse ⋯
- DescriptiveComplexity.MaxCutInterp.instDecidableEqMCTag.decEq (DescriptiveComplexity.MaxCutInterp.MCTag.lit s) DescriptiveComplexity.MaxCutInterp.MCTag.pen = isFalse ⋯
- DescriptiveComplexity.MaxCutInterp.instDecidableEqMCTag.decEq (DescriptiveComplexity.MaxCutInterp.MCTag.occ s) (DescriptiveComplexity.MaxCutInterp.MCTag.lit s_1) = isFalse ⋯
- DescriptiveComplexity.MaxCutInterp.instDecidableEqMCTag.decEq (DescriptiveComplexity.MaxCutInterp.MCTag.occ s) DescriptiveComplexity.MaxCutInterp.MCTag.pen = isFalse ⋯
- DescriptiveComplexity.MaxCutInterp.instDecidableEqMCTag.decEq DescriptiveComplexity.MaxCutInterp.MCTag.pen (DescriptiveComplexity.MaxCutInterp.MCTag.lit s) = isFalse ⋯
- DescriptiveComplexity.MaxCutInterp.instDecidableEqMCTag.decEq DescriptiveComplexity.MaxCutInterp.MCTag.pen (DescriptiveComplexity.MaxCutInterp.MCTag.occ s) = isFalse ⋯
- DescriptiveComplexity.MaxCutInterp.instDecidableEqMCTag.decEq DescriptiveComplexity.MaxCutInterp.MCTag.pen DescriptiveComplexity.MaxCutInterp.MCTag.pen = isTrue ⋯
Instances For
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
Dependency graph
The interpretation #
Defining formula for adjacency, before the width gate: the three edge families.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.MaxCutInterp.adjF x✝¹ x✝ = ⊥
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
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.MaxCutInterp.markF x✝¹ x✝ = ⊥
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
- DescriptiveComplexity.MaxCutInterp.litPt s x = (DescriptiveComplexity.MaxCutInterp.MCTag.lit s, fun (x_1 : Fin 2) => x)
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
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Characterization of the two relations #
The shape of an edge, read on tags and coordinates.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.MaxCutInterp.AdjShape x✝³ x✝² x✝¹ x✝ = False
Instances For
Dependency graph
The shape of a threshold mark, read on tags and coordinates.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.MaxCutInterp.MarkShape x✝³ x✝² x✝¹ x✝ = False
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
Every edge of the gadget graph belongs to one of the three families.
Dependency graph
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
The edges of the gadget of a clause.
Dependency graph
The threshold mark of an element.
Dependency graph
The threshold mark of an occurrence.
Dependency graph
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.