Liste des Groupes | Revenir à theory |
Remember, YOU are the one saying you are needing to change the definition from the classical theory, where we have things well defined.That D is calling H does not prove recursive simulation.
YOU have decider that H is just whatever C code you want to write for it, and D is the input proved. (which doesn't actually match the Linz or Sipser proof, but fairly close).
With THAT set of definitions we have a lot of options that break your incorrectly assumed results.
The first method has been discussed here by Flibble. While the final answer he got to doesn't fit the requirements, the first part of the method DOES show that it is possible for an H to simulate to past line 3.
THe basic idea is that if H(M,d) finds that its simulation of M(d) get to a call to H(M,d) then rather that your idea of just saying it will get stuck and declair the input invalid, since there ARE a number of possible inputs that there is a "correct" answer that H can give to
match the behavior of the direct execution of M(d), what H does is fork its simulation into two threads.We already know that D correctly simulated by H cannot possibly
Thread 1 continues the simulation assuming that the call to H(M,d) will return a 1, and if that simulation reaches a halting state, then 1 is the answer, and thread 2 can be abandoned.It has always been the case that the actual H must be a pure function
Thread 2 continues the simulation assuming that the call to H(M,d) will return a 0, and if that simulation reaches a provable non-halting pattern, then 0 is the answer, and thread 1 can be abandoned.
It may be the case that BOTH answer could be correct, in which case depending on exactly how the forking works and how long it takes each to get to the answer, either answer might be given, but then, both are correct.
It may be the case that neither answer can be shown correct, if Thread one can prove that it will be non-halting and Thread 2 halts, then the decider has proven the machine to be "contrary" to it. But it might be the case that it never can figure that out, and it just doesn't answer.
But, in all cases, it gets past the call to H(M,d), so your criteria, that NO H can get there is not meet.
The second method uses the fact that you have not restricted what H is allowed to do, and thus H can remember that it is simulating, and if a
call to H shows that it is currently doing a simulation, just immediately return 0. Thus, H can actually correct simulate the instruction at the call to H, as they will execute just a few instructions testing that condition and returning, and thus not run into the problem you ran into where H just couldn't simulate itself because it got bogged down.There is no way that pure function H can tell its simulated versions
In this case it is actually true that the direct execution of D(D) differs from the correct simulation of the input by H, as H is no longer a "Computation" per the rules of Computation Theory, but you have admitted that you are abandoning those, so it doesn't matter (of course that make trying to get your results to apply to something similar harder, but that is why you need to try to come up with some actual definitons.)*That is a whole other sequence of hundreds and hundreds of messages* *and replies that cannot be mixed in to this point to divert attention* *away from this point until we have complete closure on this point*
So, by the rules of Compuation Theory, your H is not correct, but by your lack of rules, your conclusion that H can not simulate past the call are incorrect, so you proof is also broken.--
Les messages affichés proviennent d'usenet.