Re: DDD correctly emulated by HHH is correctly rejected as non-halting V2

Liste des GroupesRevenir à theory 
Sujet : Re: DDD correctly emulated by HHH is correctly rejected as non-halting V2
De : F.Zwarts (at) *nospam* HetNet.nl (Fred. Zwarts)
Groupes : comp.theory sci.logic comp.ai.philosophy
Date : 12. Jul 2024, 22:52:13
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v6s51t$365ag$2@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
Op 12.jul.2024 om 16:56 schreef olcott:
We stipulate that the only measure of a correct emulation is the
semantics of the x86 programming language.
 _DDD()
[00002163] 55         push ebp      ; housekeeping
[00002164] 8bec       mov ebp,esp   ; housekeeping
[00002166] 6863210000 push 00002163 ; push DDD
[0000216b] e853f4ffff call 000015c3 ; call HHH(DDD)
[00002170] 83c404     add esp,+04
[00002173] 5d         pop ebp
[00002174] c3         ret
Size in bytes:(0018) [00002174]
 When N steps of DDD are emulated by HHH according to the
semantics of the x86 language then N steps are emulated correctly.
But the following M steps are not simulated at all, making the as a whole invalid, because:
1) That contradicts your stipulation that the only measure of a correct emulation is the semantics of the x86 programming language. The x86 language does not allow an abort halfway of a series of instructions.
2) Skipping the simulation of only some steps will make the behaviour different. The simulator must process the whole input, not only the first part.

 When we examine the infinite set of every HHH/DDD pair such that:
HHH₁ one step of DDD is correctly emulated by HHH.
Then it skips the last part of the simulation and that makes the simulation as a whole incorrect.

HHH₂ two steps of DDD are correctly emulated by HHH.
Then it skips the last part of the simulation and that makes the simulation as a whole incorrect.

HHH₃ three steps of DDD are correctly emulated by HHH.
Then it skips the last part of the simulation and that makes the simulation as a whole incorrect.

...
HHH∞ The emulation of DDD by HHH never stops running.
Even that simulation is incorrect, because it does not end.

 The above specifies the infinite set of every HHH/DDD pair
where 1 to infinity steps of DDD are correctly emulated by HHH.
And where the HHH that abort skip the simulation of the last part of its input, making the simulation incorrect.

 No DDD instance of each HHH/DDD pair ever reaches past its
own machine address of 0000216b and halts.
Showing that none of these simulations was correct.
It only proves that no HHH in this set is able to simulate itself correctly.

 Thus each HHH element of the above infinite set of HHH/DDD
pairs is necessarily correct to reject its DDD as non-halting.
 
No, the conclusion must be that none of the HHH in this set is able to simulate itself correctly and reach the end of the simulation.
They all miss the last part of the simulation and therefore, do not process the full input.
So, the abort was always premature and no conclusion about halting or non-halting is possible. For each of the HHH that abort, it makes no sense to dream of a HHH that does not abort, because that is not the one that this HHH is simulating.
Each of the HHH in this set only simulates itself, not another one of this set. Dreaming of another HHH in this set when simulating only itself, is irrelevant and does not make the simulation correct.
No matter how much you want it to be correct, or how many times you repeat that it is correct, it does not change the fact that none of these simulations is correct, because none of them is able to reach the end.
For each HHH in this set we see that HHH cannot possibly simulate itself correctly.
DDD has nothing to do with it. It is easy to eliminate DDD:
        int main() {
          return HHH(main);
        }
This has the same problem. This proves that the problem is not in DDD, but in HHH, which halts when it aborts the simulation, but it decides that the simulation of itself does not halt.
HHH is unable to decide about finite recursions.
void Finite_Recursion (int N) {
   if (N > 0) Finite_Recursion (N - 1);
}
It decides after N recursions that there is an infinite recursion, which is incorrect.
When it should decide about Finite_Recursion(5), the programmer starts to dream about an infinite set of Finite_Recursion(M), with M=0 to infinity, and decides that it must be an infinite recursion.

Date Sujet#  Auteur
10 Nov 24 o 

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal