Is it possible to invent a computer
that computes anything in a flash? Or do problems exist that would stump
even the most powerful computers imaginable? How complex is too complex for computation? These questions are central
to a fascinating conundrum called the P versus NP problem. P versus NP, is one of the great unsolved problems in all of math and computer science, or, you know, really in all of human knowledge, if we're being honest. Anyone who finds a solution could win
a handsome $1 million prize offered by the Clay Institute. And this solution could lead to breakthroughs in everything from medicine to artificial intelligence, and even the perfect game of Mario Brothers. But it would come at a cost. A definitive answer to the P versus NP
problem could break your bank account and even lead to the end of
the internet as we know it. To find out why, let's start
with a simple logic puzzle. A robot arrives in a foreign land where
everyone either always tells the truth or always lies. The robot reaches a
fork in the road with two choices. One path leads to safety in
the land of truth tellers, while the other leads to doom. In
the land of liars. A sentry appears. But it's unclear which
group they belong to. What question can the robot ask
to determine the safe route? Here's some options... And here's the answer. With this one question, both types of sentries would
point to the correct safe path, allowing the robot to solve
the problem quickly. Now, what if the robot encounters multiple sentries and dozens of pathways leading who knows where? What can it do to find safe passage? Compared to the first problem, is a correct solution here
proportionately more difficult to find? Or is it exponentially harder? Maybe there's a shortcut
that could speed things up? Or maybe finding a solution to this
complex situation is nearly impossible. The question of how hard a problem is
to solve lies at the very heart of an important field of computer science
called computational complexity. Computational complexity is the
study of the inherent resources such as time and space
that are needed to solve computational problems, such
as factoring numbers, for example. And especially it's the study of how those resources scale as the problems get bigger and bigger. Computational complexity theorists want to know which problems are solvable using clever algorithms. And which problems are truly difficult, maybe even practically impossible
for computers to crack. So how do computers solve
problems in the first place? A computer's core function is to
compute. These machines perform basic mathematical operations like addition and multiplication faster than any human. In 1936, a 23-year-old British
University student, Alan Turing, developed a fundamental theory of
computation. While attempting to solve a problem about the foundations of math, Turing claimed in a paper, it's possible to invent a machine which
can compute any computable sequence given enough time and memory. This simple, theoretical Turing machine, which includes a place to
store information and a device to read and write new information based on a set of instructions, is the basic framework for
all digital computers to come. One of the key insights of computer
science is that Turing machines are mathematically equivalent to
just about any other programming formalism that anyone has invented, at least for conventional computers. Inside a digital computer, data
are represented as binary bits, sequences of ones and zeros. And these bits can be manipulated through logical operations using a branch of math that preceded the invention of computers called Boolean algebra. The basic rules of Boolean algebra
were formulated in 1847 by English mathematician, George Boole. Boolean algebra
formulates decision problems, yes or no problems that can be asked
in sequence to answer complicated questions. The output of a Boolean function for
any given input can be represented in what's called a truth table,
and it is either one or zero. True or false. Expressions in Boolean logic consist of
multiple variables linked together by three logic gates: AND OR NOT. These logic gates work like this. For an AND gate, when the inputs for both variables X and Y are true, the expression evaluates to
true otherwise it's false. With the OR gate, the expression evaluates to
true when either X or Y is true. A NOT gate simply inverts
the value of a variable, switching a true to false or vice versa. By using only these three simple, logical operations and building
them up into various configurations, Boolean formulas can operate
like a Turing machine and
theoretically solve any computable problem. In 1937, an electrical engineering
graduate student, Claude Shannon, demonstrated in his master's thesis
that the Boolean operations AND, OR, and NOT can be calculated using
electronic switching circuits. A decade later, Bell Labs introduced the first solid
state semiconducting transistor. Transistors are simple, electronically
controlled switches with three wires, a control wire, and two electrodes
to input and output data. They can be in one of
two states, on or off, representing either a one
or zero. True or false. Transistors can be combined and arranged in different configurations to mimic the Boolean logic gates
of AND OR, and NOT. By combining enough of these transistors together on computer chips in complex arrangements called circuits, it's theoretically possible
to compute almost anything, anything that is computable,
that is, More about that later. In the 1950s, Hungarian American
mathematician and computer scientist, John von Neumann brought the modern computer one step closer to reality. He developed the architecture of
the universal electronic computer, the same architecture at work inside
most electronic computing devices today, from smartphones to supercomputers. Since the mid 1950s when the first
transistor based electronic computers were built, the technology has swiftly advanced. by scaling down and cramming more and more transistors onto tiny chips, computing power and speed has nearly
doubled every two years. Today, computers can perform trillions
of calculations per second. But even that's not always good enough. There's a class of problems
that computers can never solve. A quandary Alan Turing foresaw in the
same paper where he conjured up his calculating machine. Turing had the insight and in fact proved that not everything is computable. The limiting factor is not the hardware,
but instead the software or program. Computers solve problems by followinglists of instructions called algorithms. An algorithm just means a step-by-step
procedure for solving a problem. Running an algorithm is analogous to
following the steps of a recipe or an IKEA assembly manual. Here's an example of an algorithm that
sorts a list of numbers from lowest to highest. It works like this. Take a random list of numbers. Start with a first number from
the left, which here is six. Now look through the remaining
numbers and identify the smallest one, which in this case is three. Next, swap the places of six and three, and you'll have the smallest
number in the group on the left. Take a second pass this time, starting with the second number from the left. Swap with the smallest and so on. After enough passes, all the numbers
are sorted, lowest to highest using this simple algorithm. Any problem that can be solved
by an algorithm is computable. But by the 1970s, computer scientists
realize that not all computable problems are created equal. Some turned out to be easy, while others seemed hard. For problems like multiplication, computer scientists found really
fast algorithms, but for others, like optimizing the
operations in a factory, they couldn't find any easy solutions. And it turned out that
some problems were so hard, the only known way to solve them could end up taking more solution steps than there are subatomic particles
in the universe. Thus, the P versus NP problem was born. So what exactly does P and NP mean? P problems, or problems that can be solved in polynomial time are the types of problems that are relatively easy for computers to solve. The vast majority of what we use
our computers for on a day-to-day basis, you know, you could think of
as solving various problems in P. From finding the shortest path between
two points on a map. to sorting a list of names alphabetically, or searching for an item on a list. These are all examples
of polynomial P problems. A polynomial is a mathematical function that can contain variables raised to a fixed power or exponent like N to the power of two or n cubed. The time it takes a computer to solve P
problems grows polynomially as the input increases in size. Given enough computing power, all problems in P can be solved by a
computer in a practical amount of time. Now, NP problems are a class of
problems that share a unique feature. If given the solution, it turns
out to be quick and easy to verify If it's correct. Easily solved P problems are contained within the class of all NP problems because they can also be verified relatively quickly in polynomial time. However, there's a class of NP problems that are easy to check, yet seem difficult to
solve in the first place. It's really helpful to think about
something like a jigsaw puzzle or a Sudoku puzzle, right? We all have experience that, you know, these could require an enormous
amount of trial and error to solve. But nevertheless, you know, if
someone says that they solved it, it's much easier to
check whether they did. If someone gives you a completed hard
puzzle like a large Sudoku or crossword, the answers can be verified much fasterthan it can be solved in the first place. It's the same for a computer. The reason these types of NP problems can be more difficult for a computer to solve is because as far as we know, their complexity increases
exponentially as their input increases. An exponential function has the variable in the exponent like two to the power of N. Here's an example of
exponential versus polynomial growth. For the same input. With these hard, exponential NP problems, the increased complexity of large inputs
can quickly exceed the limits of what a computer can compute in a
reasonable amount of time. And solving them using brute
force techniques alone is
practically impossible. You could be doing that, you know, from from now until the whole universe
has degenerated into black holes and you wouldn't have
even made a dent in it. Over the years, mathematicians discovered clever
polynomial algorithms for some seemingly difficult NP problems. Proving that these problems were actually in the simpler class P and making them solvable by a computer. This opened the door to the question, are all NP problems really P problems? Could every problem that is seemingly
intractable for a computer to solve today turn out to be easy in the future? P equaling NP would have
far ranging consequences. Solutions to nearly any problem
would be well within our reach. AI would become smarter overnight. Businesses could solve
complicated optimization and logistics problems boosting the global economy. And scientists could make once
unthinkable breakthroughs. Maybe we could even find a
cure for the common cold? However, if P equals NP, that would also mean that all current
methods for strong encryption security measures that protect everything from your online privacy to your crypto wallet would instantly become obsolete. It would be hacker heaven. In the 1970s, mathematicians Stephen Cook and Leonid Levin working independently on opposite sides of the Iron Curtain, made important discoveries that have
come to define the P versus NP problem. They discovered the
idea of NP Completeness. Almost all of the notoriously
difficult problems in NP are actually equivalent. So if you could
prove one of those is equal to P, you've solved all of P versus NP. This is kind of like a veterinarian
realizing that even though toy poodles and St. Bernard's look very different, they're in fact the same species and a treatment that works on one would very well work on the other. There are hundreds of
known NP Complete problems, and finding a single solution would lead
to breakthroughs on multiple fronts, including physics, economics, and biology. Not to mention computer science itself. NP Complete problems include a host of famous problems you may have heard of, including the Knapsack Problem, which involves the most efficient way
to pack items like in a suitcase. Or the Traveling Salesman problem, which
involves route planning and navigation. Complicated NP Complete problems, even underlie everyday tasks like figuring out how to deliver millions of Amazon packages on time or efficient in life-saving matching of organ donors with recipients, and even mastering
games like Tetris or Candy Crush, All known NP Complete problems can
be transformed into one another. The most famous of these is what's called
the Boolean Satisfiability problem, or SAT. SAT is one of the most
famous problems in computer science. Besides its theoretical interest, it's a very fundamental workhorse
problem in applied computer science, especially in software verification. SAT is a decision problem that
asks: for a given Boolean formula or expression made up of N variables
and the logical operators AND, OR, and NOT. Is there a combination of true-false
variable assignments for which the entire formula evaluates to true? If so, then it is said to be satisfiable. If someone can devise a
clever fast algorithm for the
SAT problem making it easy to compute, then voila!
Proof that P equals NP. However, most computer science researchers
believe that P doesn't equal NP. And proving P doesn't equal NP has turned
out to be one of the hardest problems in math and computer science. In the 1980s, one promising avenue of research
emerged called circuit complexity. The field studies the complexity of
Boolean functions when represented as circuits. The behavior of any given Boolean function
can be described by its truth table. However, the same truth table can be produced by
circuits of differing complexity as seen in these two examples. A Boolean
function's circuit complexity is defined as the total number of logic
gates in the smallest circuit, which can compute that function. Researchers study circuit complexity to
understand the limits of computation and to optimize the design of
algorithms and hardware. For some Boolean functions, the minimum number of logic gates
grows polynomially as the number of input variables increases. These are said to have low circuit
complexity and are analogous to P-class computational problems. Functions where the number of necessary
logic gates grows exponentially with increasing input variables are said to have high circuit complexity. One potential approach for proving P
doesn't equal NP required researchers to identify a single function
known to be in the class of NP, that's also definitely has high
circuit complexity. In 1949, Claude Shannon proved that most Boolean
functions have high circuit complexity. So how hard could it be to find
one instance? Harder than it sounds. Alas researchers encountered
a mathematical roadblock
called the Natural Proofs Barrier. This barrier implies that any proof that
P doesn't equal NP using known circuit complexity techniques would have to have
a bizarre and self-defeating character. Clearly, a different
way forward was needed. While most researchers started
looking for other approaches, some began to investigate the
Natural Proofs Barrier itself, leading them to new questions. How hard is it to determine the hardness
of various computational problems? And why is it hard to
determine how hard it is? It's a very meta area of computer
science called meta-complexity. It has turned out that a lot of
the progress that one can make on problems like the P versus
NP problem today, you know, involves sort of
self-referential, arguments, involves sort of turning inward. Given the limits of known
techniques, meta-complexity researchers are searching for new approaches to solve
some of the most important unanswered questions in computer science. And crucially meta-complexity
is intimately connected to the question of whether provably secure cryptography
schemes even exist. One important current focus of research
is what's called the Minimum Circuit Size Problem, or MCSP. MCSP is interested in determining the
smallest possible circuit that can accurately compute a given Boolean
function. Is there a simple solution? The Minimum Circuit Size Problem is
a problem about circuit complexity, but how complex is the problem itself? Researchers suspect that
MCSP is NP complete, but unlike many other similar problems,
they haven't been able to prove it. A proof of MCSP's NP-completeness would
be a big step towards showing that secure cryptography does exist. And recently there's been tantalizing
progress towards that goal. Like the robot searching for
safe passage in a foreign land, the pursuit of meta-complexity is
blazing a trail for theoretical computer science. A path that may lead to an answer
to whether P equals NP or not. If civilization lasts
long enough, you know, I would tend to think that probably
problems like P versus NP will someday be solved, and
my main uncertainty is, is it humans who solve them or
is it AI? Is it GPT 10 that solves the P versus
NP problem for us? And then will we be able to
understand the solution if it does?