>>>> I took it from Crispin's paper and I assumed it was correct as he has done a lot of work on this... .. and I assumed when he said "solve all problems" we were referring to problems that can be solved on a Turing Complete computer.... <<<<
It is easy to prove that a computer does not need the ability to run self-modifying code*: Assume the contrary Write a emulator running on a non-self-modifying machine for the machine that has self-modifying code (does anyone think that this is not possible? Mathematically - if not practically - this is trivial) Then the emulated machine can solve the problem and thus the machine running the emulator can. (there are some loose ends to tidy up to make this a formal proof but none of them are game-changers.) * Obviously (!) to load a program into memory for execution is, in a sense, self-modification. However I don't think that is what you mean. Early 3rd generation machines had special instructions to finagle their way around self-modifying code: The/360 had EX The 1900 had OBEY The GE6xx had a rather fancy variation but I forget what it was called. However it was soon discovered that these were almost as dangerous as self-modifying code, not actually necessary. Also with the introduction of re-entrant code (and paging) self-modifying became /really bad/ (tm) Andy
