Major (unfixable) flaw found in P!=NP paper.
rjlipton.wordpress.com
rjlipton.wordpress.com
...just as it would be unwise to take the paper itself too seriously until a chorus of experts tells us that it's looking pretty good.
Also the original author removed the paper from him web page. Thus which indicates that he is probably backing out on his claim.
Yeah, that's why I wrote "legal" :-)
"Vinay Deolalikar. P is not equal to NP. 6th August, 2010 (66 pages 10pt, 102 pages 12pt). Manuscript sent on 6th August to several leading researchers in various areas. You can find the current version here. Please note that the final version of the paper is under preparation and will be submitted to journal review."
So no, he doesn't seem to be backing out...
However, the linked comment is the first major statement from a well-cited researcher (aside from S Aaronson, who hasn't even read the paper yet)
http://www.aolnews.com/surge-desk/article/p-np-wtf-a-short-g...
The objection does seem to be at the head of the objection section of the community wiki, though:
http://michaelnielsen.org/polymath1/index.php?title=Deolalik...
So it seems this is the defender our star forward has to get past to hit the ultimate math-world goal. We can now root for our respective teams... Go defenders!
I'm rooting for defenders on the principle that the present proof doesn't seem illuminating. I'd prefer a proof that seemed to give insight into the nature of complexity itself. But it's still just a diversion...
That can come later, if it's even possible. Just get the damn thing proven first.
Contrast that with, say, special relativity. I can't even really understand the consequences of special relativity (length contraction, relativity of simultaneity, time dilation, etc.) beyond accepting that my intuitions are completely errant at relativistic speeds. Because of that, I don't really expect or hope for an intuitive proof or explanation of special relativity.
Also, I'll preemptively mention that Gödel showed us that any formal problem is a problem in number theory. That said, a problem like P =? NP would almost surely be incomprehensible if expressed as an isomorphic problem in number theory. So my original point, clarified and rephrased, is that I would expect (or desire) the proof of a problem to be as intuitive as the statement of the problem combined with its consequences in the domain the problem is stated.
So it may be with mathematics. Things like Fermat's Last Theorem and P != NP may be difficult to grasp simply within our current frameworks, but new ideas may give rise to new frameworks that makes them more digestible.
If you can just get it proved somehow then you can proceed with confidence towards these new ideas.
And whomever leaked that is going to end up on the shitlist of an entire community of researchers.
But who know what the authors thinking was? Perhaps he hoped they'd share the paper only if they were sure it was right, perhaps he expected they wouldn't share it at all. Perhaps he expected they'd share it and he was already convinced the paper was correct. Perhaps he didn't care to what people outside the field thought...
(I'm confident that I could do so if I wanted to -- but my expertise lies in entirely different directions.)
It's so strange to realize how incredibly massive the field of mathematics is.
As a software developer, there isn't a single programming concept / architecture / algorithm / etc that I can't learn in less than a day. (Edit: of course, now I regret writing this. What I meant was: I can read, understand, and re-implement 99% of software engineering algorithms / architectures.)
But to know that it would take someone as insanely experienced as cpervica years of study to understand that proof... Wow.
That's quite a bold claim.
So you're right, "there isn't a single..." is probably pushing it. But I'd definitely stand by the fact that I can read, understand, and re-implement 99% of algorithms or architectures.
My point is simply that the breadth of the field of software engineering apparently pales in comparison to that of mathematics.
Or rather --- it's very strange to me that if you are an expert in a given branch of mathematics, then all of your lifetime of experiences cannot be applied to an entirely different branch. If I understand cperciva correctly, if you want to learn a particular specialized branch of mathematics, then you basically have to start from the ground-up (years).
It would basically be equivalent to wiping your memory of all programming knowledge, then re-learning it all, in terms of effort. It's just strange / interesting that mathematics works that way.
You are right that mathematics is unique in being an infinitely broad subject. Programming as a subject is like medicine in that it is constrained by the real world. However, I don't know about you but I'm not going to trust a radiologist to perform surgery because he's 'understood' the concepts in one day.
He mentioned he's a "developer", and from his point of view, (and mine), the field of practical programming knowledge is pretty limited. So he could roll up to a Barnes and Noble, pick up most any book and learn the concepts in it no problem.
But on the other hand, couldn't P=NP be considered "programming concept" itself? But on the third hand, maybe once its figured out, it will be a concept he could learn in a day.
Conversely she was shocked to realize that people in mathematics couldn't. And that you could easily complete a masters in mathematics without once being asked to try to read a real research paper.
That shocks me, too. I'd expect anyone completing a master's degree in mathematics to have published at least one paper, never mind reading others' papers.
Publishing is another story. Reading current research is one thing... actually successfully advancing the state of the art in an area of pure math is quite another. (Applied math is another story altogether).
The University of Chicago awards ‘incidental’ master's degrees at the end of the first year of graduate study (http://catalogs.uchicago.edu/divisions/math.html). Although it's certainly possible to be reading current research at that point, I wasn't; and yet I think it's fair to say that U of C degrees are worth something.
Personally I published my first paper in undergrad. But that was considered unusual among the people I knew.
Can you implement this algorithm in less than a day then?
http://www.cs.princeton.edu/~chazelle/pubs/polygon-triang.pd...
Disregarding the "linear time" part, there is a standard way to accomplish this goal:
- the polygon can be thought of as the "outline".
- transform the outline into a set of XYZ positions (verts). This is accomplished simply by starting at any point on the outline, then stepping along the outline by a fixed interval until you wind up back at your start pos.
- then:
triangles = []
while len( verts ) >= 3:
for i from 0 to len( verts ) - 2:
A = verts[i]
B = verts[i+1]
C = verts[i+2]
# verify the triangle has not been flipped inside-out, and is not degenerate.
det = Determinant2x2( A - B, C - B )
# if the triangle is degenerate, then remove the middle vertex.
if det == 0:
verts.remove( B )
break;
# if the triangle is inside-out, skip it.
if det < 0:
continue;
# if the triangle does not intersect the polygon and is not inside-out, then it is a valid triangle, so add it to the result.
if not TriangleIntersectsPolygon( poly, A, B, C ):
triangles.append( [A, B, C] )
verts.remove( B )
break;
This is known as 'ear clipping'.Now, it is not linear time, but there is no reason to optimize this algorithm unless it turns out to be necessary, which I've never yet seen to be the case in an actual real-world scenario.
That's the thing about scientific papers --- they are very useful, but only if your problem domain precisely matches theirs. For example if you don't care about "linear time", then all of that paper's complexity simply fades away.
This is like someone challenging me to implement merge-sort, and then I give him the solution to bubble-sort saying that there's "no reason to optimize" until necessary.
Granted the cases where Chazelle's linear time algorithm is necessary is less than merge-sort. But that is true of any field, including mathematics.
I gave a solution that solves the problem. The problem is, convert an arbitrary concave closed polygon into a set of triangles. I maintain that it is completely valid for me to present that solution --- there are plenty of tricks you can do to optimize it in C/C++. And not just runtime optimization either... For example why not triangulate the polygon, then save the results to disk? That way O(N log N) vs O(N) becomes completely irrelevant... you only have to do it once, ever.
I suppose what I am saying is this: I can solve 99% of real-world problems I am likely to encounter in my career as a software engineer. The challenge "implement THIS scientific paper!" is completely invalid because it's a solution to a problem which very likely will never exist. My solution is valid as long as it does not greatly impact the performance of the app. Which is "always", once you throw in a layer of caching.
P.S. The paper has the restriction "for every polygon vertex XY, no two vertices may have the same Y coordinate", which means it's likely to not be applicable to any real-world problem.
Memoization is not panacea. This is like telling someone to sort every possible group of numbers and saving it to disk so you don't have to implement something faster than bubble-sort.
My point is that in any field, "99% of real-world problems" are easy enough for the average college graduate to comprehend. Think about the kind of math that is useful for "real-world" problems. When you start bragging that you can learn any CS topic/algorithm in less than a day, you just didn't look hard enough.
P.S. You missed the sentence right after where it says "we can easily get around this assumption by applying the symbolic perturbation techniques of [10] and [31]"
Memoization is not panacea. This is like telling someone to sort every possible group of numbers and saving it to disk so you don't have to implement something faster than bubble-sort.
I really am not trying to be mean, I'm just stating the facts -- your statement is so full of ignorance that it's kind of disturbing that you believe it. Programming is generally an exercise in caching. There was a good article posted a long time ago called It's caches, all the way down. If you think about it, memoization (a.k.a. 'caching') has been the primary solution to a large percentage of past problems. The examples off the top of my head:
- GPU memory is a cache of system memory
- system memory is a cache of the hard drive
- the operating system presents a file I/O interface which heavily utilizes caching
- John Carmack developed Quake which revolutionized the realtime graphics industry primarily because of his innovative "potential visibility set" algorithm, which is just a cache of computing visibility on-the-fly
So for all intents and purposes, memoization (caching) IS the magical panacea that you deny it to be.
Of course caches are important. But it isn't the only thing. That's why programs aren't all giant databases. Memoization != better caching either. That is simply naive. If your algorithm can fit in L1-L2 cache, it can be better than loading a giant hash table or tree from disk.
I'm not trying to be mean either, but you have all the signs of a junior developer who thinks there is nothing left in CS to challenge him as he churns out enterprise crud where caching is the only thing he can think of that matters.
Because the problem applies primarily to realtime 3D / 2D graphics, of which I have spent the last 7 years learning about. That is of course not a guarantee the problem does not exist, but it is very likely. Otherwise, it would be one of the significant known problems in realtime graphics.
Even if you are pre-computing it, wouldn't you like it to go faster, like encoding a video or rendering a ray-traced scene?
What I want is irrelevant. All that matters is what the application needs to do. It is a senseless waste of time to optimize a sufficiently fast algorithm.
There are an infinite number of polygons.
There are an infinite number of numbers. This has no bearing on the problem, on the effectiveness of caching, or on any other of my points. In other words, this is yet another completely irrelevant statement by you.
You have all the signs of a junior developer who thinks there is nothing left in CS to challenge him as he churns out enterprise crud where caching is the only thing he can think of that matters.
Oh, really? I did you the courtesy of explaining exactly why your earlier statement was so full of ignorance. You merely insult without reason or basis. Congrats, you are a troll and have been trolling this entire time. This means you have not only completely discredited yourself, but are also no longer worth trying to disprove, because your statements are without reason or merit. Which is quite sad, since I personally was interested in an opposing viewpoint; but not if it's completely insane.
Have you even solved any problems related to "polygons" in your programming career? Also, how long exactly have you been programming for? I have been programming for ten years. I'm trying to find one good reason to take any of your statements seriously. Unless you have any graphics experience, or more experience in general, I see no reason to. And since you have neither logic nor tact, I see no reason to continue this conversation.
Instead of rising up to the challenge or admitting failure, you make broad sweeping generalizations like you could learn 99% of any CS concept in less than a day, and that any challenge that you are not willing to do (or likely cannot), is because the challenge has no "real-life" application.
Not only did you read the paper incorrectly, trying desperately to find holes in it, but you try to change the subject by calling me naive in my refusal to allow you to just say "memoize" as the answer to any algorithmic challenge. I think it is clear to anyone else reading this that you are in the wrong here.
The following algorithms have beaten me totally and I wasn't able to implement them:
Bochs multiple shooting (the modern versions are even more complex): http://www.iwr.uni-heidelberg.de/groups/agbock/FILES/Bock198...
Multitaper Spectrum Analysis: http://www.amazon.com/Spectral-Analysis-Physical-Application...
Korenbergs Nonlinear system identification algorithm: http://www.informaworld.com/smpp/content~db=all~content=a769...
While this may be true, you are comparing apples to oranges. "Read, understand and re-implement software algorithms / architectures" is to computer science as "Read, understand and apply some given formulas to solve a problem instance" is to maths/physics.
Formalizing and proving the correctness and boundaries of these formulas is the hard part here, where mathematicians are doing their job. You probably can implement a Support Vector Machine in one day given a detailed pseudo-algorithm, but truly understanding the underliying concept, as well as its weaknesses and strong points is way harder. Let alone improving it. And the very same thing can be said about a lot of other algorithms (MRF-optimization, coding theories, etc.).
edit: sorry, was viewing this from a mobile phone, which didn't skip ahead to the comment.
edit: the commenter Charanjit Jutla seems to know his stuff but I still maintain that an offhand comment does not warrant the definitive titling of your submission.
They bring out the worst in the same way that bad QA employees do. They create no wealth and add little value. They slow down and confuse the process. But in the end they are still necessary. There is something to be said about how one reports such problems. Most here know a great QA person that reports relevant problems in a intelligent manner and is there to help find solutions. Versus the QA person that just cranks out an endless stream of wonky insane problems. All make you look bad and all are difficult to reproduce, understand or address.
It's my understanding that his approach is a radical and new way to attempt to solve the P!=NP problem. So it's no surprise that at first glance the vast majority of average math and computer scientists would think it was not a valid approach. And, again no surprise to me, that has ended up to be the case. I don't pretend to understand this flaw or Deolalikar's paper. But I do understand the type of person that posts comments like that...
It looks like the math community has settle on a wiki to unofficially collect news and information on the paper:
http://michaelnielsen.org/polymath1/index.php?title=Deolalik...
I'm quite clear if you read more than one sentence.
It's the way this guy responded to a comment of a blog about the paper. It just seems like a bad place to post a real unfixable flaw to the paper. Assuming the commenter is right (also possibly a bad assumption) why not put some effort into your response that will be read by every computer science and math person you'll ever work with in the future. For instance how does one respond, follow up, contact this guy? I have to go google him wtf. It's the equivalent to nitpicking. In the end someone else will have to pick up the pieces of what he said and analyze it and rewrite it and repost it. So to me he seems like the guy from QA that no one wants to work with - a bad team player.
The only thing that you can say is that this approach was one of the trickier ones to do it in a wrong way.
Yet it does not "necessarily" means that this approach is actually a starting point.
Just it seems to be more complex than the other approaches.
Or, rather, that someone (well qualified) thinks it was. I am very sceptical of a refutation based on the assumption that the proof founders on a beginner's mistake; it's not impossible, but, if Deolalikar is a beginner in the relevant field (I have no idea!), then it seems very likely that he would have consulted with someone who wasn't to avoid such trip-ups.
> Yet it does not "necessarily" means that this approach is actually a starting point.
I am a mathematician, not a computer scientist; but I think it's safe to say that any approach to a well known problem that is not (1) immediately dismissible (by experts) as crackpottery or (2) a laborious advance an inch down a familiar road of reasoning is likely to represent a promising starting point for something (future research in general, if not the answer to the specific question). If it is (3) described by experts as a novel and/or unexpected approach, as I think that this paper was, then that likelihood becomes a near-certainty.
In TCS, new strategies/approaches/techniques are often just as valuable as the results (and in top conferences, they are sometimes considered even more important).
We need to subject every paper to serious criticism in order to establish which morsels have merit. Hand-waving and weak logic seriously impediment our progress, so many researchers get very frustrated by it.
All of Computer Science is paying attention to this paper, and it wasn't even published anywhere. People popping up out of nowhere is a good thing. It's even a compliment to the work.