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.