In computational complexity, not-all-equal 3-satisfiability (NAE3SAT) is an NP-complete variant of the Boolean satisfiability problem, often used in proofs of NP-completeness.
[1] Like 3-satisfiability, an instance of the problem consists of a collection of Boolean variables and a collection of clauses, each of which combines three variables or negations of variables.
However, unlike 3-satisfiability, which requires each clause to have at least one true Boolean value, NAE3SAT requires that the three values in each clause are not all equal to each other (in other words, at least one is true, and at least one is false).
[2] The NP-completeness of NAE3SAT can be proven by a reduction from 3-satisfiability (3SAT).
[2] First the nonsymmetric 3SAT is reduced to the symmetric NAE4SAT by adding a common dummy literal
to every clause, then NAE4SAT is reduced to NAE3SAT by splitting clauses as in the reduction of general
In more detail, a 3SAT instance
are arbitrary literals) is reduced to the NAE4SAT instance
Conversely a satisfying assignment with
must have at least one other literal true in each clause and thus be a satisfying assignment for
Finally a satisfying assignment with
be flipped to produce a satisfying assignment with
NAE3SAT remains NP-complete when all clauses are monotone (meaning that variables are never negated), by Schaefer's dichotomy theorem.
[3] Monotone NAE3SAT can also be interpreted as an instance of the set splitting problem, or as a generalization of graph bipartiteness testing to 3-uniform hypergraphs: it asks whether the vertices of a hypergraph can be colored with two colors so that no hyperedge is monochromatic.
More strongly, it is NP-hard to find colorings of 3-uniform hypergraphs with any constant number of colors, even when a 2-coloring exists.
[4] Unlike 3SAT, some variants of NAE3SAT in which graphs representing the structure of variables and clauses are planar graphs can be solved in polynomial time.
In particular this is true when there exists a planar graph with one vertex per variable, one vertex per clause, an edge for each variable–clause incidence, and a cycle of edges connecting all the variable vertices.