What you call a "liar" program is typically called a diagonalization argument, since it somehow resembles Cantor's diagonalization argument.
Usually what we mean by that is that if we try to enumerate all elements with a certain property, then we can point out, by construction, an element that is necessarily "incorrect", and we do so by ...
Mapping x86 programs to a Turing equivalent abstract model
The following abstract machine maps the x86 language to machines with a fixed pointer size of the largest unlimited integer address that is actually needed by the computation.
: INTEGER ":" OpCode
| INTEGER ":" OpCode Integer
| INTEGER ":" ...