As I understand it in simple language the proof of this goes
Take a program (called oracle below) that will stop if the program it is examining never halts and never halts if the program it is examining halts.
Using this oracle program to examine itself results in a contradiction ...
The thing I do not understand is, why should the oracle not work as follows.
The program says 'never halts' if the program being examined never halts and 'halts' if the program being examined halts?
No contradiction there?
My tentative answer to this issue is that my second program could be used to generate the original program and hence expose the contradiction.