Re: P = NP!



Cory Knapp wrote:
Based on his description of the algorithm, and some comments he made
on a public math forum (mymathforum.com), it seems his algorithm
amounts to a DFS on a ternary tree*, which traverses the tree until it
finds a contradiction, and then backs up and tries again until it
makes it to a leaf (Or doesn't). Obviously, this is not a polynomial
algorithm. I wrote up a verbose, lengthy, and inelegant (and perhaps
incorrect) proof at the forum previously mentioned.

I strongly suspect that at least three different versions of the "algorithm" exist. At best, he is bad at writing; at worst, he is intentionally misleading and vague.

The format of the paper is as follows (for anyone too lazy to see the link):

1. Introduction. Mention that it's a polynomial time algorithm to solve 3-SAT, an NP-Complete problem.

2. Describe the SAT problem.
2a. First blunder is failing to distinguish between the SAT and CNF-SAT forms of the problem. Misleading in numerous ways, but since SAT has a polynomial-time reduction to 3-SAT, it's somewhat acceptable, although quite unprofessional.
2b. Talks about the DNF form for no reason I can divine. He claims it's for "explanation purposes," but far from being enlightening, it's downright confusing.

3. Describe the Algorithm.
3a. We start by, once again, referring to the DNF form even though we're explicitly told we're not trying to solve the DNF form.

HINT:
____ ___ ____ ___ _____ ___ _ _ _____ _
| _ \ |_ _|| _ \ |_ _||_ _| / _ \ | | | ||_ _|| |
| |_) | | | | |_) | | | | | | | | || | | | | | | |
| _ < | | | __/ | | | | | |_| || |_| | | | |_|
|_| \_\|___||_| |___| |_| \___/ \___/ |_| (_)

3b. Define tc(vx, x), which appears to be equivalent to "true iff x is satisfiable if vx is true". Strongly reminiscent of <http://www.sciencecartoonsplus.com/images/miracle3.gif>.

3c. Oh, by the way, the algorithm is essentially "for all tokens [appearances of a or ~a] in the expression, if one tc(token, x) is true, then it's satisfiable."

4. Defining the implementation of the magic function above.
4a. Hey, we're back in CNF after two pages of DNF. No clear distinction that we've changed forms, except for a more-or-less in-passing mention and the sudden realization that the algorithm is not describing DNF anymore.

Quite frankly, no matter that we've had at least four warnings that DNF is only for instructional purposes, all they do is make everything even muddier. It's certainly not making this magic tc function any easier to understand, especially because we now have an description working in a different form from the definition of the problem.

4b. The first paragraph of the algorithm is easy enough to understand: go through the clauses from left to right, checking to see if each clause has a valid token. If a clause doesn't have one, the function returns false.

4c. The second paragraph starts simple (a valid token is one that doesn't contradict any earlier assumed value). The second part of the paragraph is just confusing referencing the "TR definition", a phrase not mentioned anywhere else.

4d. In short, here's some pseudocode (quite python-like):

function validToken(clause, knownTokens):
for each token in clause:
if token.variable in knownTokens:
if token.negated = knownTokens[token.variable].negated:
return TRUE
else:
knownTokens[token.variable] := token
return TRUE
return FALSE

function isSatisfiable(x):
tokens := {}
for each clause in x:
for each token in clause:
if token not in variables:
tokens.push(token)
while tokens is not empty:
token := tokens.pop()
knownTokens := {token.variable => token.negated}
for each clause in x:
if not validToken(clause, knownTokens):
continue outer loop
return TRUE
return FALSE

DISCLAIMER: I am basing this off of the description of the algorithm on pages 3 and 4. A close reading will note that this is an important distinction.

5. Claim of running time.
5a. Did you notice that the algorithm is described with not even an attempt at proof of correctness? It seems to consist of a "It feels right" aura.
5b. Did you also notice a lack of backtracking? That's why it's polynomial. It's also why it's incorrect, since SAT is a problem where "local optima don't correspond to global optima" (to quote a cljp poster, originally made in reference to another NP-complete problem).

6. Code in C#.
6a. Not in pseudocode.
6b. C# is a language that's far from cross-platform, making it inaccessible to those like myself who operate Linux...
6c. ... not to mention that it's badly written code. For example, naming a variable `Not,' which is practically guaranteed to make you have to read the code three times to be sure it's doing the right thing.
6d. It's also badly formatted, with line breaks inconveniently in the middle of functions or (even worse) in the middle of an expression. The syntax highlighter's choice of colors is also an eye-hurting one.
6e. Finally, it doesn't appear to match the pseudocode I generated from my best understanding of the algorithm, in that it fails to reset the knownTokens part.

7. A final words section, i.e. "This is a big, important question and I solved it." Difficult to say whether that `I' is an *I* or merely an I, though.
.



Relevant Pages

  • Re: compression type
    ... occurance of what repeats, for there to be a token, for how tokens ... see its construction algorithm. ... It's very limited to think that's the only way to compress, ... made different, to the other shape, where the math to say one shape ...
    (comp.compression)
  • Re: compression type
    ... occurance of what repeats, for there to be a token, for how tokens ... for how a repeat occurance of a length of data can be said ... see its construction algorithm. ... can compress them even though there are no patterns, ...
    (comp.compression)
  • Re: Pin generation algorithm question
    ... As I understand it, you don't need an algorithm, you need randomness. ... You'll have to keep a record of all the tokens in issue. ... you will only get a few random false acceptances to upset your customers. ... have to be kept secret. ...
    (sci.crypt)
  • Re: RSA SecureID on Solaris
    ... On Mon, 8 Apr 2002, adam morley wrote: ... >> Your tokens are provided with a floppy disk which contains an encrypted ... >> The algorithm has been broken in December 2000 but you need to have the ... brute forcing is still pretty hard. ...
    (Focus-SUN)
  • Re: question about GRASP/RELSAT stack management
    ... Wcncom wrote: ... > algorithm will choose other variables to branch on ... using the new clause starting at an even older point in the tree. ... Efficient Conflict Driven Learning in a Boolean Satisfiability Solver, ...
    (comp.theory)