The Halting Problem

I’m sorry Dave. I can’t do that.

Consider the language:
  ATM = {<M, w> | M is a Turing machine that accepts w}

Suppose H is a decider for ATM. Deciders never loop.
    H(<M, w>) = accept, if M accepts w
    H(<M, w>) = reject, if M does not accept w

Use H to build the demonic D
    D(<M>) = accept, if H(<M, <M>>) = reject
    D(<M>) = reject, if H(<M, <M>>) = accept
We can do this because H is a decider.

Let’s simply that a little
    D(<M>) = accept, if M does not accept <M>
           = reject, if M does accept <M>

But what if we pass D to D
    D(<D>) = accept, if D does not accept <D>
           = reject, if D does accept <D>

The videos of Harry H. Porter, III are another reference for those who like to YouTube it.