P can look at any program and find out if it will run forever or not. We use P to make a new program that we will call Q. What Q does is look at another program and then answer the following question: "If we run this program and make it look at a copy of itself, will it run forever?". We can make Q because we have P. All we need to do is to tell Q to create a new program that is the old program looking at itself, and then use P to find out if the new program runs forever or not.