 Alan Turing was a great man. Could you please explain in plain English what is meant by a computer program being or not being Turing complete? Alan Turing was indeed a great man. And one of the great things that I experienced in my life was the first year of my computer science course. Our computer science professor at the University of London gave us a book, which was a biography of Alan Turing. It was fascinating to read about Alan Turing and his life. It's a tragic ending, by the way. The British government basically tortured him and chemically castrated him for being gay and he committed suicide. Instead of being a hero for essentially helping the Allies win the Second World War, he was punished for being gay. So it's a tragic story. Anyway, let's go to the question. What is meant by a computer being or not being Turing complete? The simplest way I can explain this, I think, is a Turing complete program or programming language that allows you to operate Turing complete programs is one where the program can express all possible programs. So Alan Turing created this concept of a universal Turing machine, which is basically a theoretical computer that can run any program. Any program can be configured inside a universal Turing machine. And so anything that's equivalent to universal Turing machine is Turing complete. And a Turing complete system is one where you can run any program. And that usually means that it includes some form of loops or recursion. That means that you can do something like repeat this thing until some condition. And that's known as a loop. So run this program until something happens. One of the important characteristics of Turing complete programs is that when they go into a loop, you don't know if they're going to reach an exit condition and stop running. In fact, Alan Turing proved that you can't know in advance whether a computer program will terminate. And this is a very important problem that was proven by Alan Turing to be true. And this is why if you have a programming language that is Turing complete, you don't know if it's ever going to finish running. It has an unpredictable runtime, an unprovable runtime. So a Turing incomplete program is a program that is simple enough, doesn't have loops, doesn't have recursion, that you know how long it's going to take to run. You know all of the possible conditions it will run under. And when it's going to terminate, you can actually prove it algorithmically and prove that it's going to run for a specific length of time. And that makes it a lot simpler. It makes it a lot more manageable. So Bitcoin scripting language, for example, is Turing incomplete. It doesn't have loops. It doesn't have recursion. It's been carefully designed to be that way. In fact, it's harder to make something Turing incomplete, because many computer programs have been made accidentally Turing complete, where people thought they were incomplete, meaning that they had predictable runtime. And in fact, they were not. Turing complete systems, while they can express any possible program, and they're very flexible, we never know if they're going to finish running. And that's why when you have a blockchain that operates a Turing complete system, you need a way to meter the time and resources that it uses so that doesn't just run forever. We can write, for example, a program in the Ethereum virtual machine that will run forever. And in order to prevent that, there's the mechanism of gas, which means that you have to have an upper limit on how much computation you consume when running an Ethereum smart contract. That's just one example. I hope that was a relatively simple explanation in plain English. If you'd like to support my mission of bringing education about Bitcoin and open blockchains, to as many people as possible under open, free Creative Commons licenses, please consider subscribing to my channel and supporting me on patreon.com slash a-a-n-t-o-n-o-p. Thank you.