<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Latent Mirror — math</title><description>Posts and reflections tagged “math”.</description><link>https://latentmirror.com/</link><language>en-ca</language><copyright>© 2026 Dan Peterson. CC BY-SA 4.0.</copyright><item><title>P vs NP, a primer</title><link>https://latentmirror.com/posts/p-equals-np/</link><guid isPermaLink="true">https://latentmirror.com/posts/p-equals-np/</guid><description>seedling · tended 2026-10-03</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;what-the-question-asks&quot;&gt;What the question asks&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.claymath.org/millennium/p-vs-np/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;P vs NP&lt;/a&gt; asks whether every problem whose answer is easy to check is also easy to find. Nobody knows, and the question has been open since Stephen Cook posed it in 1971 (&lt;a href=&quot;https://dl.acm.org/doi/10.1145/800157.805047&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cook, 1971&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Sudoku is the easy way in. Checking a filled grid takes a minute: scan every row, column and box. Filling an empty grid can take far longer (and for bigger grids, it seems to explode).&lt;/p&gt;
&lt;p&gt;The two letters name two kinds of problems:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P:&lt;/strong&gt; problems a computer can &lt;em&gt;solve&lt;/em&gt; in &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_complexity#Polynomial_time&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;polynomial time&lt;/a&gt;, i.e. the work grows like n² or n³ as the input grows (rather than like 2ⁿ).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NP:&lt;/strong&gt; problems where a proposed answer can be &lt;em&gt;checked&lt;/em&gt; in polynomial time (&lt;a href=&quot;https://en.wikipedia.org/wiki/NP_(complexity)&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;NP&lt;/a&gt;).&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;L&quot;&gt;
&lt;p&gt;Every P problem is also an NP problem (if you can solve it fast, you can check it fast). The open question is whether the reverse holds. One caveat worth keeping in mind: “polynomial” is a theoretical stand-in for “fast”. An algorithm that takes n¹⁰⁰ steps is technically polynomial and practically useless.&lt;/p&gt;
&lt;aside class=&quot;pop pop--footnote&quot; aria-label=&quot;Footnote from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Footnote&lt;/span&gt;The N stands for nondeterministic, not &quot;not&quot;. NP is what a machine could solve in polynomial time if it guessed right at every fork, which comes to the same thing as checking a proposed answer.&lt;/aside&gt;
&lt;/div&gt;
&lt;h2 id=&quot;why-it-matters&quot;&gt;Why it matters&lt;/h2&gt;
&lt;p&gt;The answer decides whether searching is fundamentally harder than recognizing. That reaches well past computer science.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If P = NP&lt;/strong&gt; (with a practical algorithm): most &lt;a href=&quot;https://en.wikipedia.org/wiki/Public-key_cryptography&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;public-key cryptography&lt;/a&gt; breaks; hard scheduling, routing and design problems become routine. The underrated part is mathematics itself. Finding a proof short enough to check would become about as easy as checking one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If P ≠ NP:&lt;/strong&gt; search stays hard, which is the world most experts believe we live in. (Cryptography actually needs more than P ≠ NP to be safe, so a proof would not settle that question on its own.)&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;R&quot;&gt;
&lt;p&gt;The Clay Mathematics Institute offers $1 million for a proof either way; it is one of the seven &lt;a href=&quot;https://www.claymath.org/millennium/p-vs-np/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Millennium Prize Problems&lt;/a&gt; named in 2000. In Bill Gasarch’s 2019 poll of researchers, 88% expected P ≠ NP (&lt;a href=&quot;https://www.cs.umd.edu/users/gasarch/BLOGPAPERS/pollpaper3.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Gasarch, SIGACT News&lt;/a&gt;).&lt;/p&gt;
&lt;aside class=&quot;pop pop--tangent&quot; aria-label=&quot;Tangent from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Tangent&lt;/span&gt;Keith Devlin predicted in 2002 that P vs NP would fall to an amateur, because anyone can understand the question (&lt;a href=&quot;https://www.keranews.org/2003-01-17/wanted-math-solutions&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;NPR, 2003&lt;/a&gt;). The amateurs took him up on it: &lt;a href=&quot;https://wscor.win.tue.nl/woeginger/P-versus-NP.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Woeginger&apos;s list&lt;/a&gt; catalogues 116 claimed proofs, split almost evenly between the two answers.&lt;/aside&gt;
&lt;/div&gt;
&lt;h2 id=&quot;an-amateurs-intuition-choices-that-interact&quot;&gt;An amateur’s intuition: choices that interact&lt;/h2&gt;
&lt;p&gt;My hunch from years of writing code: easy problems have choices that stay independent, and hard problems have choices that interact. It turns out the field has studied this from several angles.&lt;/p&gt;
&lt;p&gt;Here is how I picture it. Any optimization problem is a set of unordered things that must be arranged to satisfy rules (positive or negative), with some quality score to maximize or minimize. An algorithm is a series of transformations of that set; each step costs some effort and nudges the quality up or down.&lt;/p&gt;
&lt;p&gt;In sorting, moving one item into place does not change whether the other items meet the rules. Each fix stands alone. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Travelling_salesman_problem&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;traveling salesman problem&lt;/a&gt; is the opposite: picking one road changes which roads make sense later. You can’t know your future choices in advance without exploring the combinations.&lt;/p&gt;
&lt;p&gt;The field captures this idea three ways:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Greedy algorithms:&lt;/strong&gt; a classic theorem (Rado and Edmonds) pins down exactly when taking the locally best step, every time, is guaranteed to reach the global best. Those structures are called &lt;a href=&quot;https://en.wikipedia.org/wiki/Matroid&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;matroids&lt;/a&gt;. They are my “transformations that don’t harm future choices”, made precise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How much of the past you must remember:&lt;/strong&gt; this is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_programming&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;dynamic programming&lt;/a&gt; view. The table below shows how that memory grows.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Problem&lt;/th&gt;&lt;th&gt;What you must remember to continue correctly&lt;/th&gt;&lt;th&gt;Known status&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Sorting&lt;/td&gt;&lt;td&gt;Nothing&lt;/td&gt;&lt;td&gt;Easy (P)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Shortest path&lt;/td&gt;&lt;td&gt;Where you are now&lt;/td&gt;&lt;td&gt;Easy (P)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Traveling salesman&lt;/td&gt;&lt;td&gt;Which cities you’ve already visited (2ⁿ possibilities)&lt;/td&gt;&lt;td&gt;Hard (NP-hard)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;That last row is why the best exact salesman algorithm (&lt;a href=&quot;https://en.wikipedia.org/wiki/Held%E2%80%93Karp_algorithm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Held and Karp, 1962&lt;/a&gt;) still takes exponential time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frustration:&lt;/strong&gt; physicists use this word for constraints that can’t all be satisfied at once (&lt;a href=&quot;https://en.wikipedia.org/wiki/Geometrical_frustration&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;geometrical frustration&lt;/a&gt;). It makes the “energy landscape” rugged: full of dead ends where every small change looks worse, yet you are not at the best answer. Sorting has no such dead ends. Each swap of an out-of-order neighbouring pair fixes exactly one problem. Finding the lowest-energy state of a 3D &lt;a href=&quot;https://en.wikipedia.org/wiki/Spin_glass&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;spin glass&lt;/a&gt; (a frustrated magnet) is NP-hard (&lt;a href=&quot;https://doi.org/10.1088/0305-4470/15/10/028&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Barahona, 1982&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;where-the-intuition-breaks&quot;&gt;Where the intuition breaks&lt;/h2&gt;
&lt;p&gt;Interacting choices don’t, on their own, make a problem hard. Some of the most tangled problems turn out to be easy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2-SAT:&lt;/strong&gt; every choice forces other choices through a chain of implications. Still, &lt;a href=&quot;https://en.wikipedia.org/wiki/2-satisfiability&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;2-SAT&lt;/a&gt; can be solved in linear time. Its close cousin &lt;a href=&quot;https://en.wikipedia.org/wiki/Boolean_satisfiability_problem&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;3-SAT&lt;/a&gt; is NP-complete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matching:&lt;/strong&gt; pairing people or tasks so as many as possible are matched is full of interacting choices. But Jack Edmonds found a polynomial algorithm in 1965, in the same paper that proposed polynomial time as the definition of an “efficient” algorithm (&lt;a href=&quot;https://doi.org/10.4153/CJM-1965-045-4&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Edmonds, 1965&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linear programming:&lt;/strong&gt; every variable interacts with every other, yet &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_programming&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;linear programming&lt;/a&gt; is solvable in polynomial time. Its landscape has no false peaks (any local best is the global best). Even so, the classic method that climbs it can take exponential time (&lt;a href=&quot;https://en.wikipedia.org/wiki/Klee%E2%80%93Minty_cube&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Klee–Minty&lt;/a&gt;); the first polynomial algorithm, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ellipsoid_method&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ellipsoid method&lt;/a&gt;, came in 1979.&lt;/p&gt;
&lt;p&gt;In each case, a clever change of viewpoint made the interaction stop mattering. That is the real gap. Proving P ≠ NP means showing no such viewpoint exists for any NP-complete problem, against every possible algorithm (including ones nobody has imagined yet).&lt;/p&gt;
&lt;p&gt;So my intuition is a decent guide to which problems &lt;em&gt;feel&lt;/em&gt; hard. It can’t be the proof.&lt;/p&gt;
&lt;h2 id=&quot;why-a-proof-is-so-hard&quot;&gt;Why a proof is so hard&lt;/h2&gt;
&lt;p&gt;Three proven “barrier” results rule out most of the proof techniques we know. Any serious attempt has to explain how it gets around all three.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Barrier&lt;/th&gt;&lt;th&gt;Who and when&lt;/th&gt;&lt;th&gt;What it rules out&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Relativization&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://doi.org/10.1137/0204037&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Baker, Gill and Solovay, 1975&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Arguments that still work when every machine gets the same magic helper (an “oracle”); this includes &lt;a href=&quot;https://en.wikipedia.org/wiki/Diagonal_argument&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;diagonalization&lt;/a&gt;, the trick behind the &lt;a href=&quot;https://en.wikipedia.org/wiki/Halting_problem&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;halting problem&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Natural proofs&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://doi.org/10.1006/jcss.1997.1494&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Razborov and Rudich, 1994&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Most circuit lower-bound arguments; one strong enough to separate P from NP would also break cryptography we believe is secure&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Algebrization&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.scottaaronson.com/papers/alg.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Aaronson and Wigderson, 2008&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Turning logic into polynomials (the trick that cracked other big results) is not enough on its own either&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Natural_proof&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;natural proofs&lt;/a&gt; barrier is my favourite: believing that hard problems exist is exactly what stops you from proving that hard problems exist.&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;L&quot;&gt;
&lt;p&gt;The live research programs (&lt;a href=&quot;https://en.wikipedia.org/wiki/Geometric_complexity_theory&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;geometric complexity theory&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Proof_complexity&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;proof complexity&lt;/a&gt;, &lt;a href=&quot;https://www.quantamagazine.org/complexity-theorys-50-year-journey-to-the-limits-of-knowledge-20230817/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;meta-complexity&lt;/a&gt;) are all attempts to find a path around these walls. Lance Fortnow, who has tracked the problem for decades, wrote in June 2026 that there is not yet even a viable approach (&lt;a href=&quot;https://blog.computationalcomplexity.org/2026/06/respect-p-v-np-problem.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Computational Complexity blog&lt;/a&gt;).&lt;/p&gt;
&lt;aside class=&quot;pop pop--counterpoint&quot; aria-label=&quot;Counterpoint from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Counterpoint&lt;/span&gt;Not every wall is flat. Ryan Williams turned faster algorithms into proofs of hardness (&lt;a href=&quot;https://people.csail.mit.edu/rrw/acc-lbs.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;ACC lower bounds, 2011&lt;/a&gt;) and won the 2024 Gödel Prize for it. It is a long way from P vs NP, but it is a route nobody had mapped.&lt;/aside&gt;
&lt;/div&gt;
&lt;h2 id=&quot;the-verified-proof-mirage&quot;&gt;The “verified proof” mirage&lt;/h2&gt;
&lt;p&gt;A Lean proof guarantees every step follows from the last. It does not guarantee the theorem means what its title says.&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;R&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://lean-lang.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lean&lt;/a&gt; is a proof assistant: a small trusted program (the kernel) checks each step of a proof. &lt;a href=&quot;https://lean-lang.org/doc/reference/latest/ValidatingProofs/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lean’s own documentation&lt;/a&gt; separates two questions: did Lean accept a proof of the formal statement, and does that statement actually mean what the author claims? Only the first is automatic.&lt;/p&gt;
&lt;aside class=&quot;pop pop--hottake&quot; aria-label=&quot;Hot take from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Hot Take&lt;/span&gt;Claude can write a flawless Lean proof of the wrong theorem in seconds. The kernel will sign off on it, and so will the press release.&lt;/aside&gt;
&lt;/div&gt;
&lt;p&gt;There are three common ways a “verified” proof goes wrong:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Definitions:&lt;/strong&gt; P and NP get defined as something simpler (or meaningless) that is easier to prove things about.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Premises:&lt;/strong&gt; the hard part sits as an assumption inside the theorem’s own statement. Lean’s &lt;code&gt;#print axioms&lt;/code&gt; report does not flag these.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Axioms:&lt;/strong&gt; big cited results are assumed rather than proved.&lt;/p&gt;
&lt;p&gt;The June 2026 paper claiming a Lean-verified proof that P = NP (&lt;a href=&quot;https://arxiv.org/abs/2606.03194&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;arXiv 2606.03194&lt;/a&gt;) is a live example. According to a &lt;a href=&quot;https://postquantum.com/industry-news/aix-global-innovations-millennium-prize/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;PostQuantum report&lt;/a&gt;, a &lt;a href=&quot;https://github.com/TiruArt/Pedigree-Polytopes-Lean4/issues/1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;GitHub issue&lt;/a&gt; opened the next day showed its top-level proposition was first defined as &lt;code&gt;True&lt;/code&gt;. It was later revised to an axiom never formally connected to real complexity classes. Meanwhile, a &lt;a href=&quot;https://reservoir.lean-lang.org/@Mintpath/p_ne_np/dependencies&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;separate Lean package&lt;/a&gt; claims a machine-verified proof that P ≠ NP. Both can’t be right.&lt;/p&gt;
&lt;p&gt;In September, a company called AIX Global claimed to have solved all six remaining Millennium Prize Problems. Its own audit script marked the P ≠ NP result as conditional on unproven premises (&lt;a href=&quot;https://postquantum.com/industry-news/aix-global-innovations-millennium-prize/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;same report&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The Clay Institute guards against all of this by design. It &lt;a href=&quot;https://www.claymath.org/millennium-problems/rules/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;accepts no direct submissions&lt;/a&gt;; a solution must be published in a qualifying outlet, survive two years of scrutiny, and win general acceptance.&lt;/p&gt;
&lt;h2 id=&quot;sudoku-the-whole-primer-in-one-puzzle&quot;&gt;Sudoku: the whole primer in one puzzle&lt;/h2&gt;
&lt;p&gt;Sudoku holds every idea above in miniature: easy to check, hard to fill, and full of interacting choices.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Check vs. find:&lt;/strong&gt; verifying a finished grid is quick; finding the answer from scratch can mean a lot of trial and error.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interacting choices:&lt;/strong&gt; every digit you place constrains its row, its column and its box. That is my sorting-vs-salesman intuition at kitchen-table scale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where hardness actually lives:&lt;/strong&gt; Yato and Seta proved in 2003 that Sudoku generalized to any size (n² × n² grids) is NP-complete (&lt;a href=&quot;https://en.wikipedia.org/wiki/Mathematics_of_Sudoku&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;mathematics of Sudoku&lt;/a&gt;). The ordinary 9 × 9 grid is a fixed size, so a computer solves it in an instant. Complexity is about how the work &lt;em&gt;grows&lt;/em&gt;, which is easy to forget.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Propagation vs. search:&lt;/strong&gt; most newspaper puzzles fall to pure deduction (&lt;a href=&quot;https://en.wikipedia.org/wiki/Constraint_propagation&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;constraint propagation&lt;/a&gt;: each placement forces the next). The hardest ones need guessing and &lt;a href=&quot;https://en.wikipedia.org/wiki/Backtracking&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;backtracking&lt;/a&gt;. That split mirrors 2-SAT and 3-SAT: when forced moves run out, you are left searching.&lt;/p&gt;
&lt;p&gt;To watch that search happen, &lt;a href=&quot;/artifacts/sudoku-search-lab/&quot;&gt;Sudoku Search Lab&lt;/a&gt; shades every cell by how often the solver touched it and counts the backtracks.&lt;/p&gt;
&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Lance Fortnow, &lt;a href=&quot;https://press.princeton.edu/books/paperback/9780691175782/the-golden-ticket&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;em&gt;The Golden Ticket&lt;/em&gt;&lt;/a&gt; (book-length popular treatment)&lt;/li&gt;
&lt;li&gt;Michael Sipser, &lt;a href=&quot;https://en.wikipedia.org/wiki/Introduction_to_the_Theory_of_Computation&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;em&gt;Introduction to the Theory of Computation&lt;/em&gt;&lt;/a&gt;, chapters 7 to 9 (the standard on-ramp)&lt;/li&gt;
&lt;li&gt;Scott Aaronson, &lt;a href=&quot;https://www.scottaaronson.com/papers/philos.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;“Why Philosophers Should Care About Computational Complexity”&lt;/a&gt; (essay)&lt;/li&gt;
&lt;li&gt;Scott Aaronson, &lt;a href=&quot;https://www.scottaaronson.com/papers/pnp.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;“P =? NP”&lt;/a&gt; (the best single map of the field)&lt;/li&gt;
&lt;li&gt;Avi Wigderson, &lt;a href=&quot;https://www.math.ias.edu/avi/book&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;em&gt;Mathematics and Computation&lt;/em&gt;&lt;/a&gt; (free online)&lt;/li&gt;
&lt;li&gt;Gerhard Woeginger’s &lt;a href=&quot;https://wscor.win.tue.nl/woeginger/P-versus-NP.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;P-versus-NP page&lt;/a&gt; (a catalogue of claimed proofs, all wrong)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.computationalcomplexity.org/2026/06/respect-p-v-np-problem.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Respect the P v NP Problem&lt;/a&gt; (Fortnow, June 2026)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://postquantum.com/industry-news/aix-global-innovations-millennium-prize/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;AIX’s Millennium Problem Claims Fail Their Own Audit&lt;/a&gt; (PostQuantum, September 2026)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.emergentmind.com/papers/2606.03194&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lean 4 Verified P=NP via Pedigree Polytope&lt;/a&gt; (paper summary)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cacm.acm.org/research/fifty-years-of-p-vs-np-and-the-possibility-of-the-impossible/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Fifty Years of P vs. NP&lt;/a&gt; (Fortnow, CACM)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot;&gt;Connections&lt;/h2&gt;
&lt;p class=&quot;related&quot;&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;/posts/twenty-eight-choices/&quot;&gt;Twenty-eight choices&lt;/a&gt;, &lt;a href=&quot;/reflections/recursive-self-improvement-cluster/&quot;&gt;Recursive Self-Improvement — the RSI Ladder and the Verification Problem&lt;/a&gt;&lt;/p&gt;</content:encoded><category>programming</category><category>cognitive-science</category><category>math</category></item></channel></rss>