The Boolean Satisfiability Problem and SAT Solvers
0a.io
0a.io
Anyway I still enjoy thinking about the problem, my random ideas have taken on more structure based on diving into the different subjects and trying to use them on this problem. I find it fascinating that you can take something simple like these linear circuits and it turns out that they are not simple at all and that they scale through the different disciplines.
"A problem is NP-complete if it belongs to the set (or “class” if you prefer) of the hardest problems in NP - hardest in the sense that every problem ever exists in NP can be reduced to them. (Thus being able to solve a NP-complete problem is equivalent to being able to solve every problem in NP)."
100% wrong. All problems in NP cannot be reduced to NP-Complete. All problems in NP-Complete can be converted between each other. I didn't bother reading the rest of the article, if this basic information is so wrong the rest probably is as well.
It is shown that any recognition
problem solved by a polynomial time-
bounded nondeterministic Turing
machine can be "reduced" to the pro-
blem of determining whether a given
propositional formula is a tautology.
https://en.wikipedia.org/wiki/NP-completeness
http://dl.acm.org/citation.cfm?coll=GUIDE&dl=GUIDE&id=805047> All problems in NP cannot be reduced to NP-Complete.
I'm interested into what has led you to believe this to be the case. The word "Complete" here means this: Given any problem C in NPC, and any problem R in NP, any instance of R can be converted to an instance of C with only polynomial extra work. That includes converting the instance over, and then bringing the solution back.
> All problems in NP-Complete can be converted between each other.
That is a simple consequence of the first bit, since problems in NPC are also in NP.
That matches what the article says.
So, what led you to believe the article to be wrong?
Author needs to fix this typo. Additionally, I think this is sloppy reasoning and will confuse readers. Sub-exponential algorithms include polynomial algorithms, so saying that "X is subexponential but we can't prove it is not in P" is not as precise as "Algorithm X is subexponential but at best superpolynomial, which is not to say that problem Y cannot be in P in general".
Edit: on reflection, I actually think I agree with opportune's concern after all, which I had slightly misunderstood at first.
SAT is also an opportunity to point to an important family of data structures called Binary Decision Diagrams, abbreviated as BDDs, and their variants. Using BDDs, you can solve many interesting tasks that would be infeasible with most other known methods.
Of particular relevance are ordered and reduced BDDs, sometimes abbreviated as ROBDDS, or also simply BDDs if it is clear from the context that they are ordered and reduced. A second very important variant are zero-suppressed BDDs, abbreviated as ZDDs.
More information is available from:
https://en.wikipedia.org/wiki/Binary_decision_diagram
and especially in:
Donald Knuth, The Art of Computer Programming, Volume 4, Fascicle 1: Bitwise tricks & techniques; Binary Decision Diagrams, of which a fascicle is available online:
http://www-cs-faculty.stanford.edu/~knuth/fasc1b.ps.gz
One application of BDDs is found in the constraint solvers for Boolean tasks that ship with some Prolog systems. For example, consider the SAT formula from the article:
a∧(a∨x∨y)∧(¬a∨¬b)∧(c∨b)∧(d∨¬b)
With SICStus Prolog and its CLP(B) library, we can express this task by posting the following query: ?- sat(A*(A + X + Y)*(~A + ~B)*(C+B)*(D + ~B)).
In response, the system answers with: A = C, C = 1,
B = 0,
sat(X=:=X),
sat(Y=:=Y),
sat(D=:=D).
This is an example of a SAT solver that is complete, which is an important classification that is also explained in the article. In this concrete case, the Prolog system's answer means that A and C must definitely be 1, and B must definitely be 0, to make the formula satisfiable at all.In this concrete case, the other variables (X, Y and D) may each be assigned any of the two truth values: They have no influence on the formula's satisfiability!
Using the predicate labeling/1, you can generate all satisfying assignments on backtracking. In this concrete case, they are:
?- sat(A*(A + X + Y)*(~A + ~B)*(C+B)*(D + ~B)),
labeling([X,Y,D]).
A = C, C = 1, X = Y, Y = B, B = D, D = 0 ;
A = C, C = D, D = 1, X = Y, Y = B, B = 0 ;
A = Y, Y = C, C = 1, X = B, B = D, D = 0 ;
A = Y, Y = C, C = D, D = 1, X = B, B = 0 ;
A = X, X = C, C = 1, Y = B, B = D, D = 0 ;
A = X, X = C, C = D, D = 1, Y = B, B = 0 ;
A = X, X = Y, Y = C, C = 1, B = D, D = 0 ;
A = X, X = Y, Y = C, C = D, D = 1, B = 0.I would expect a smarter approach in solvers' design.