XPost: comp.theory, sci.logic
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.
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)