Polylog
AI-assisted summary of What P vs NP is actually about — original source. Check the original for full context.
Source published:
Key ideas
- The P versus NP question fundamentally asks whether computational algorithms can be run in reverse as efficiently as they are evaluated forward. (0:01)
- Any deterministic algorithm or digital circuit can be mechanically translated into a Boolean satisfiability (SAT) instance in Conjunctive Normal Form (CNF). (4:41)
- By clamping the output wire of a multiplication circuit to a target value while leaving input wires unconstrained, a SAT solver acts as an integer factorer capable of breaking RSA. (6:49)
- The Cook–Levin theorem established that SAT is NP-complete, proving that discovering a polynomial-time SAT solver would yield efficient solutions for all NP problems. (12:03)
Detailed notes
## Background Published by Polylog on YouTube on August 19, 2024, this video explores the core concepts underlying the P versus NP problem. According to the page description, it investigates what would happen if algorithms could be run backwards by converting programs into circuits and translating those into boolean satisfiability (SAT) problems.
## TL;DR The video reframes the P versus NP question around the concept of algorithmic invertibility—whether computational processes can be run backwards as easily as they run forward. By converting deterministic operations like multiplication or graph-coloring verification into digital circuits, every logical gate can be encoded into boolean satisfiability (SAT) clauses. Because constraints lack innate directionality, an efficient polynomial-time SAT solver would allow one to clamp output wires and invert any checking algorithm, cracking RSA cryptography and collapsing the entire NP complexity class. Ultimately, the piece explains the Cook–Levin theorem and Karp's reductions, showing how thousands of NP-complete problems are just disguised manifestations of SAT, while reflecting on why proving the intractability of inversion remains theoretical computer science's greatest challenge.
## Atmosphere & style The presentation carries Polylog's signature cerebral, highly visual, and lucid explanatory style, driven by calm narration and crisp, Solarized-palette Manim animations. It feels intellectually exhilarating yet deeply grounded, guiding the viewer from elementary logic gates to cosmic questions of entropy and computational asymmetry. Rather than drowning in abstract complexity theory, the video builds intuitive momentum through hands-on mechanical demonstrations, evoking both the playful wonder of reverse-engineering a circuit and the profound awe of facing a fundamental law of mathematical reality.
## Bulletin - [00:01](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=1s) The P versus NP question fundamentally asks whether computational algorithms can be run in reverse as efficiently as they are evaluated forward. - [04:41](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=281s) Any deterministic algorithm or digital circuit can be mechanically translated into a Boolean satisfiability (SAT) instance in Conjunctive Normal Form (CNF). - [06:49](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=409s) By clamping the output wire of a multiplication circuit to a target value while leaving input wires unconstrained, a SAT solver acts as an integer factorer capable of breaking RSA. - [12:03](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=723s) The Cook–Levin theorem established that SAT is NP-complete, proving that discovering a polynomial-time SAT solver would yield efficient solutions for all NP problems.
## Key takeaways - [00:01](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=1s) P versus NP is not just an abstract taxonomy of complexity classes; it centers on whether algorithms can be inverted as easily as they are computed. - [00:48](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=48s) The Boolean satisfiability problem (SAT) asks whether there exists a variable assignment of 0s and 1s that simultaneously satisfies a system of logical constraints. - [02:15](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=135s) RSA cryptography depends on the computational asymmetry between easy multiplication and the apparent hardness of factoring large composite integers. - [02:45](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=165s) Long multiplication in binary can be physically laid out as a circuit of logic gates, such as AND arrays for partial products and adder rows for summation. - [04:41](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=281s) Every individual logic gate can be faithfully encoded into Conjunctive Normal Form (CNF) clauses matching its truth table. - [06:49](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=409s) Because constraints have no inherent directionality, SAT solvers treat inputs and outputs identically, enabling circuits to be executed in reverse. - [07:25](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=445s) Setting a multiplication circuit's output wires to a number and solving for inputs forces the SAT solver to perform factorization, extracting non-trivial factors or proving prime unsatisfiability. - [08:10](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=490s) Factoring real-world RSA keys would generate circuits with tens of millions of variables, which choke modern heuristic SAT solvers. - [08:46](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=526s) Any deterministic algorithm maps to semiconductor gates and wires, meaning any problem verification procedure can be converted into a SAT instance. - [10:35](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=635s) Inverting the verification circuit for 3-coloring by clamping its output wire to 1 allows a SAT solver to discover valid graph colorings from scratch. - [12:03](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=723s) The complexity class NP comprises all decision problems whose candidate solutions can be verified in polynomial time. - [12:37](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=757s) The Cook–Levin theorem proved that SAT is NP-complete, meaning every problem in NP reduces to SAT in polynomial time. - [13:33](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=813s) Richard Karp showed that SAT reduces to dozens of foundational combinatorial problems, which eventually expanded into thousands of equivalent NP-complete problems. - [14:33](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=873s) If P = NP, all modern cryptography would collapse, including one-way cryptographic hash functions designed to act like digital blenders. - [15:32](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=932s) Unlike physics, which can adopt principles like the second law of thermodynamics as empirical laws of nature, computer science requires a rigorous mathematical proof to establish P ≠ NP.
## Detailed walkthrough ### [00:01](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=1s) Running Computers Backwards and the Power of SAT
The inquiry begins with a provocative thought experiment: what would happen if we could run computers backwards? While the question might sound like science fiction, it forms the exact core of the most celebrated and consequential open question in theoretical computer science, the P versus NP problem. Framed through this lens, P versus NP is not merely an abstract taxonomy of complexity classes; it is fundamentally an investigation into whether algorithmic processes can be inverted as easily as they are evaluated in the forward direction.
At the center of this machinery stands the boolean satisfiability problem, universally known as SAT. Within theoretical computer science, SAT occupies a legendary status—functioning as a kind of algorithmic superhero. Researchers have identified thousands of distinct problems equivalent to SAT, yet computer science remains fundamentally stumped on how to solve it efficiently. As narrator Václav Volhejn outlines, unlocking an efficient solution to SAT would permit running arbitrary computer circuits in reverse, unlocking capabilities that range from cracking modern public-key cryptography to reshaping our understanding of computation itself. As Volhejn asserts: “By the end of this video, you'll understand why the P vs NP question is ultimately about whether we can invert algorithms.”
[00:48](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=48s) Demystifying SAT and CNF Formulas
At its foundational level, the boolean satisfiability problem begins with a set of boolean variables, each restricted to two possible states: true or false (or, in the natural shorthand of programmers, 1 and 0). Alongside these variables comes a collection of logical constraints that must all simultaneously evaluate to true. While general SAT allows arbitrary, highly nested logical expressions, computer scientists standardly simplify the problem into Conjunctive Normal Form (CNF-SAT). In a CNF formulation, the problem is expressed as a conjunction of clauses, where each individual clause consists of variables or their negations joined strictly by OR operations.
Consider a concrete clause such as $(b \lor \neg c \lor \neg d)$. This single constraint dictates that for the clause to be satisfied, either variable $b$ must be assigned 1, or $c$ must be assigned 0, or $d$ must be assigned 0. An entire SAT instance consists of many such clauses chained together by AND operations; every single clause must be satisfied by a chosen assignment of zeros and ones across the variables. Finding a valid assignment—or formally determining that no valid assignment can possibly exist—becomes astronomically difficult as the number of variables and constraints grows. If someone were to discover a lightning-fast SAT solver, the repercussions would be seismic. As Volhejn emphasizes: “The answer is that it would absolutely destroy any intuition that we have about our universe.”
[02:15](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=135s) Breaking RSA: Multiplication as a Circuit
To understand the disruptive power of an efficient SAT solver, one need look no further than public-key cryptography. The world's digital infrastructure relies heavily on the RSA cryptosystem, whose mathematical shield rests on an asymmetry: multiplying numbers together is computationally trivial, whereas factoring a composite number into its constituent prime factors is believed to be exceptionally difficult. As Volhejn explains: “The security of the RSA cipher rests on the assumption that factoring, writing an input composite number as a product of two integers, is a really hard computational problem.” If factoring could be executed rapidly, RSA would crumble instantly.
Multiplying two numbers—such as 3 and 5—can be directly cast as an algorithmic problem and translated into a physical or logical circuit. Taking grade-school long multiplication and adapting it to binary (base 2), the algorithm operates by first computing intermediate products through bitwise operations and subsequently summing those partial products. In circuit form, this translates to a physical architecture of wires carrying electrical binary states (0 or 1) and logic gates performing primitive boolean operations.
```mermaid flowchart TD accTitle: Long Multiplication Circuit Architecture accDescr: Data flow showing input wires passing into intermediate product gates, then adder stages, to output product wires.
subgraph Inputs ["Input Layer"] A["Input A (e.g., 3 / 0011)"] B["Input B (e.g., 5 / 0101)"] end
subgraph Logic ["Circuit Core"] AND["AND Gate Array (Partial Products)"] ADD["Binary Full-Adder Rows (Summation)"] end
subgraph Output ["Result Layer"] OUT["Output Product Wires (e.g., 15 / 1111)"] end
A --> AND B --> AND AND --> ADD ADD --> OUT ```
For two 4-bit numbers, the circuit feeds the input wires through an initial bank of AND gates that generate the intermediate binary products. The second stage of the circuit passes those partial products through successive rows of binary adder gates—themselves constructed from elementary logic gates—to aggregate the totals. When 3 (`0011`) and 5 (`0101`) are set on the input wires and allowed to propagate forward through the gates, the output wires inevitably stabilize to the binary representation of 15 (`1111`).
[04:41](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=281s) Converting Digital Circuits into SAT Clauses
Because an algorithm implemented as a circuit is entirely governed by discrete local interactions, any digital circuit can be converted directly into a CNF-SAT instance. The conversion follows a clean, mechanical recipe: first, allocate a boolean SAT variable for every single wire across the circuit. Next, inspect each individual logic gate and write a set of boolean constraints that faithfully captures that gate's exact truth table.
For an AND gate where output wire $f$ is driven by input wires $c$ and $e$ ($f = c \land e$), its behavior is perfectly encoded using three CNF clauses: 1. $(\neg c \lor \neg e \lor f)$ 2. $(c \lor \neg f)$ 3. $(e \lor \neg f)$
The first clause enforces that whenever both inputs are 1 ($c = 1$ and $e = 1$), the terms $\neg c$ and $\neg e$ become 0, compelling wire variable $f$ to equal 1 to satisfy the clause. The subsequent two clauses enforce that if either input wire carries a 0, the output wire $f$ cannot be 1.
Applying this logic to the complete 4-bit binary multiplication circuit yields a SAT instance comprising approximately 80 variables and 400 logical constraints. If this formula is submitted to a SAT solver without fixing any inputs, the solver will simply search for any physically valid state of the circuit, returning an arbitrary valid multiplication (such as $2 \times 4 = 8$ or $1 \times 7 = 7$). However, if the user explicitly appends unit clauses pinning the input wire variables to specific bits—specifying that wire $x_1 = 0$, $x_2 = 1$, and so on—the SAT solver is constrained to a single unique solution. The solver propagates the logical implications, and reading the resulting values assigned to the output wire variables reveals the product: 15.
[06:49](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=409s) Running the Circuit in Reverse to Factor Numbers
Multiplying numbers by solving a massive system of SAT clauses is undeniably convoluted when a simple CPU instruction can do it in a fraction of a nanosecond. But the procedure harbors a transformative secret: constraints have no innate directionality. While a physical circuit can only propagate signals downstream from inputs to outputs, a SAT formulation treats every wire variable with equal mathematical standing.
Instead of freezing the input wires and letting the solver deduce the output, one can invert the constraints: clamp the output wires to 15, and leave the input wire variables completely unconstrained. By doing so, the user forces the SAT solver to work backwards through the multiplication network. Volhejn highlights the conceptual shift: “In other words, we're solving the question: if we know the output of the circuit is 15, what does its input have to be?” The solver is no longer multiplying; it is factoring.
- **Handling Trivial Factors:** Left unguided, a SAT solver attempting to factor 15 might promptly assign the input variables to 1 and 15 ($1 \times 15 = 15$). While mathematically valid, trivial factorizations do not break ciphers. To rule them out, one appends a handful of extra logic gates enforcing that both input factors must strictly exceed 1. - **Isolating Non-Trivial Factors:** With the non-triviality constraints integrated, running the SAT solver on output 15 cleanly extracts the inputs 5 and 3. - **Identifying Primes:** When provided an output corresponding to a prime number, such as 13, the SAT solver inspects the constraint network and reports that the instance is unsatisfiable (UNSAT), formally proving that no non-trivial factor pairs exist. - **The Gap to RSA:** Factoring the large composite keys typically found in RSA (roughly on the order of $10^{500}$) would yield a circuit requiring roughly 50 million variables. Modern heuristics-based SAT solvers choke on instances of that scale. However, if a polynomial-time algorithm—operating in linear or quadratic time—were discovered for SAT, breaking industrial RSA keys would become trivial.
[08:46](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=526s) General Reductions: Inverting Arbitrary Algorithms and Graph Coloring
The cryptographic breakthrough against RSA illustrates a universal principle. Nothing about the circuit-to-SAT conversion was unique to arithmetic multiplication. Any computer program running on standard hardware is ultimately executing on a microprocessor composed of semiconductor gates and wires. As Volhejn observes: “Ultimately, it's just a bunch of wires and gates.” Because any deterministic algorithm can be unfurled into a circuit of logic gates, any computational process can be mechanically translated into an equivalent SAT instance.
Consequently, having a general, rapid SAT solver would allow one to invert any algorithmic function imaginable. Standard computer execution asks: "Given input $X$, what is the output $Y$?" By contrast, encoding the circuit into SAT allows one to pose the inverse question: "Given that I desire output $Y$, what input $X$ must be supplied to generate it?"
This paradigm applies directly to classic hard computational challenges, such as the 3-coloring problem in graph theory. In 3-coloring, one is given an arbitrary graph and must color each node using one of three colors such that no two adjacent nodes share the same color. Verifying whether a proposed coloring is valid is computationally trivial: an algorithm simply iterates over every edge, checks whether the endpoints have different colors, and outputs 1 if valid or 0 if a conflict appears. But finding that coloring from scratch is notoriously difficult. By framing the simple verification algorithm as a circuit, fixing its output wire to 1 ("valid"), and handing the resulting formula to a SAT solver, the problem of finding a valid 3-coloring is automatically solved.
[10:35](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=635s) Inverting the 3-Coloring Checker via SAT
To verify a graph coloring, an algorithm simply iterates over all edges in the graph and checks that the endpoints of each edge are assigned distinct colors. Just like multiplication, this checking procedure can be translated directly into a boolean circuit. The resulting circuit looks considerably messier than the one used for integer multiplication, featuring dedicated logic gates for every single node and edge to confirm that no two adjacent vertices share the same color. A single final output wire indicates whether the coloring is valid; it evaluates to $1$ only if every single gate across the entire network confirms validity.
```mermaid flowchart LR accTitle: Inverting a Checking Circuit with SAT accDescr: A proposed coloring flows into a checking circuit, producing an output wire clamped to 1, which inverts verification into problem solving. subgraph Circuit["Verification Circuit"] A["Candidate Inputs<br/>(Color assignments)"] --> B["Logic Gates<br/>(Edges & Nodes)"] B --> C["Output Wire<br/>(1 = Valid, 0 = Invalid)"] end C -->|"Constrain output = 1"| D["SAT Solver<br/>(Inverts the circuit)"] D -.->|"Recovers"| A ```
If the circuit evaluates an invalid coloring, the output drops to $0$ because an internal NAND gate flags two adjacent vertices sharing an identical color. By encoding this circuit structure into a satisfiability (SAT) instance and attaching an explicit constraint requiring the final output wire to equal $1$, the verification algorithm is effectively inverted. Rather than merely validating a known coloring, the SAT solver is tasked with finding an input assignment that forces the checker to accept.
> “This gives us an incredibly general way of solving problems.”
- A verification circuit maps a candidate solution to a single boolean output ($1$ for valid, $0$ for invalid). - Clamping the output wire to $1$ within a SAT formulation forces the solver to search backward for valid inputs. - Any decision problem equipped with an efficient solution checker can have its inverse encoded as an instance of SAT.
---
[12:03](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=723s) P, NP, and Cook–Levin NP-Completeness
In theoretical computer science, a “fast” algorithm is formally defined as one whose runtime is bounded by a polynomial function of the input size. The complexity class NP consists of all decision problems whose candidate solutions can be verified in polynomial time. NP encompasses virtually all landmark computational challenges, ranging from 3-coloring and integer factorization down to simpler operations like integer multiplication. Because the reduction converting an arbitrary checking algorithm into a SAT formula runs in polynomial time, discovering a polynomial-time SAT solver would automatically yield a polynomial-time solution for every problem inside NP.
Crucially, the satisfiability problem itself belongs to NP. Checking whether an assignment satisfies a SAT formula is straightforward: one simply iterates through each clause to verify that all constraints evaluate to true. Because SAT is inside NP and every other problem in NP can be transformed into it, satisfiability acts as the "hardest" problem in the class. Formally, a problem is NP-complete if it sits in NP and every NP problem reduces to it in polynomial time. This foundational result was proven independently over 50 years ago by Stephen Cook and Leonid Levin.
> “So you can view satisfiability as the hardest problem in NP. Because once you've solved SAT, you've solved everything in this class.”
- **Fast algorithm:** An algorithm running in polynomial time. - **NP (Nondeterministic Polynomial time):** The class of problems where candidate solutions are verifiable in polynomial time. - **NP-completeness:** A problem is NP-complete if it is in NP and every problem in NP can be reduced to it in polynomial time. - **Cook–Levin Theorem:** Proved that SAT is NP-complete, establishing the foundation of computational complexity theory.
---
[13:33](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=813s) Karp’s 21 Problems and the Universality of SAT
Shortly after Stephen Cook proved that SAT is NP-complete, Richard Karp published a seminal paper demonstrating that the phenomenon was widespread. Karp established polynomial-time reductions from SAT to roughly 20 other central NP problems, including the traveling salesman problem and graph coloring. In the decades following Karp’s work, researchers identified thousands upon thousands of additional NP-complete problems across graph theory, combinatorial optimization, machine learning, bioinformatics, and game theory.
```mermaid flowchart TD accTitle: Equivalence of NP-Complete Problems accDescr: Cook and Levin proved SAT is NP-complete, Karp reduced SAT to 20+ problems, which expanded into thousands of equivalent NP-complete problems. A["Cook-Levin Theorem<br/>(Proves SAT is NP-Complete)"] --> B["Richard Karp's Reductions<br/>(20+ Problems, e.g., TSP, Coloring)"] B --> C["Thousands of Modern NP-Complete Problems<br/>(Optimization, Bioinformatics, ML, Games)"] C -->|"Polynomial-time algorithm for any single problem"| D["Universal Solution for ALL NP-Complete Problems"] ```
Because an efficient algorithm for any single NP-complete problem would immediately solve every other NP-complete problem via these polynomial reductions, their fundamental distinctness is open to debate. They can all be understood as alternative mathematical formulations of a single underlying puzzle: satisfiability.
> “They're all just different formulations of a single problem: satisfiability.”
---
[14:33](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=873s) P vs NP, One-Way Functions, and the Intuition of Inversion
The core question remains: does a polynomial-time algorithm for satisfiability exist? This is the famous P versus NP problem. In practice, the best general-purpose SAT solvers in the worst case perform barely better than brute-force exponential search, trying every possible assignment. Back in the 1960s, researchers had already noted that trying assignments sequentially fails on large instances. This computational barrier aligns with deep human intuition: verifying a proposed answer feels fundamentally easier than discovering it from scratch, just as executing a function in the forward direction does not mean its inverse can be computed quickly.
If $P = NP$, an efficient SAT solver would not only break RSA factoring but collapse all cryptography by enabling the inversion of cryptographic hash functions. Hash functions act as digital "blenders" (prompting the classic catchphrase, *“Will it blend? That is the question”*), performing convoluted bitwise manipulations that are easy to run forward but intractable to reverse from output bits alone. This asymmetry mirrors entropy and the second law of thermodynamics, where making a mess is far easier than reassembling the pieces:
> “Unfortunately, the difference between physics and computer science is that we can't simply declare P does not equal NP as a law of nature and claim our Nobel prize.”
Unlike empirical physics, theoretical computer science demands rigorous mathematical proof. While researchers have developed countless techniques for designing clever algorithms, proving lower bounds—that *no* fast algorithm can ever exist for a given problem—remains extraordinarily difficult. As the video concludes, the narrator emphasizes that the true core of P vs NP is algorithmic invertibility:
> “The heart of the problem is whether we can invert algorithms.”
Viewers are invited to explore the companion blog post, which covers clarifications and weirder extensions—such as interpreting deep learning backpropagation as an approximate circuit inverter—before the narrator closes with an earnest plea to like, subscribe, and support the channel on Patreon.
## Notable quotes > [14:33](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=873s) Unfortunately, the difference between physics and computer science is that we can't simply declare P does not equal NP as a law of nature and claim our Nobel prize.
> [12:03](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=723s) So you can view satisfiability as the hardest problem in NP. Because once you've solved SAT, you've solved everything in this class.
> [02:15](https://www.youtube.com/watch?v=6OPsH8PK7xM&t=135s) The security of the RSA cipher rests on the assumption that factoring, writing an input composite number as a product of two integers, is a really hard computational problem. — Václav Volhejn
## Mentioned Polylog, P vs NP, Boolean Satisfiability Problem (SAT), Conjunctive Normal Form (CNF), RSA cryptosystem, Stephen Cook, Leonid Levin, Cook–Levin Theorem, Richard Karp, Karp's 21 NP-complete problems, Traveling Salesman Problem, 3-Coloring Problem, Václav Volhejn, Václav Rozhoň, Richard Hladík, Gabor Hollbeck, Manim, Intel 8008
## Video description What if we could run algorithms backwards? We discuss how we could do this by turning algorithms into circuits and encoding those into satisfiability problems. We then explain how it all connects to P vs NP.
Patreon: https://www.patreon.com/Polylog Website: https://polylog.cc
#somepi
0:48 Satisfiability 2:15 Breaking RSA 8:46 General reductions to SAT 12:03 P vs NP
Blog post: https://vasekrozhon.wordpress.com/2024/08/18/what-p-vs-np-is-actually-about/ Code for the animations: https://github.com/polylog-cs/np-completeness/ Blender clip: https://www.youtube.com/watch?v=qg1ckCkm8YI
Richard Hladík: Script editor, animator Gabor Hollbeck: Video recording, video editor Václav Rozhoň: Writer, animator Václav Volhejn: Narrator, animator, script editor
Thank you to our beta testers: Matěj, Honza, Filip
Animations: manim, a Python library https://docs.manim.community/en/stable/ Color palette: Solarized https://ethanschoonover.com/solarized/ Music: Thannoid by Blue Dot Sessions Pictures: * Intel 8008: https://www.righto.com/2016/12/die-photos-and-analysis-of_24.html * Stephen Cook: https://www.heidelberg-laureate-forum.org/laureate/stephen-a-cook/ * Leonid Levin: https://www.cs.bu.edu/fac/Lnd/ * Richard Karp: https://www.icsi.berkeley.edu/icsi/people/karp * Mick Jagger, Keith Richards: Wikipedia * Hash function circuit: https://www.academia.edu/download/31149146/498-497.pdf
[Source](https://www.youtube.com/watch?v=6OPsH8PK7xM)