This exact same analysis always applies to the input to H(P,P) no matter
how it is called including this example:
int main()
{
P((u32)P);
}
the Turing machine halting problem. Simply stated, the problem
is: given the description of a Turing machine M and an input w,
does M, when started in the initial configuration q0w, perform a
computation that eventually halts? (Linz:1990:317).
In computability theory, the halting problem is the problem of
determining, from a description of an arbitrary computer program
and an input, whether the program will finish running, or continue
to run forever. https://en.wikipedia.org/wiki/Halting_problem
Because the halting problem only requires that the (at least partial)
halt decider decide its input correctly the fact that the direct
invocation of P(P) is not an input to H, means that it is not relevant
to the halting problem.
The P(P) of main() only halts because H(P,P) correctly decides that its
input never halts. This cause-and-effect relationship between the
simulated P and the executed P proves that the simulated P and the
executed P are distinctly different computations.
Because they are different computations the fact that the executed P
halts does not contradict the fact that the simulated P never halts.
While H remains in pure simulation mode simulating the input to H(P,P)
this simulated input never halts thus conclusively proving that H
decides this input correctly.
Because H only acts as a pure simulator of its input until after its
halt status decision has been made it has no behavior that can possibly effect the behavior of its input. Because of this H screens out its own address range in every execution trace that it examines. This is why we
never see any instructions of H in any execution trace after an input
calls H.
*Halting computation* is any computation that eventually reaches its own final state. This criteria divides computations that halt from those
that merely stop running because their simulation was aborted.
A Turing machine is said to halt whenever it reaches a configuration
for which δ is not defined; this is possible because δ is a partial
function. In fact, we will assume that no transitions are defined for
any final state, so the Turing machine will halt whenever it enters a
final state. (Linz:1990:234)
// Simplified Linz Ĥ (Linz:1990:319)
// Strachey(1965) CPL translated to C
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
int main()
{
Output("Input_Halts = ", H((u32)P, (u32)P));
}
_P()
[00000c36](01) 55 push ebp
[00000c37](02) 8bec mov ebp,esp
[00000c39](03) 8b4508 mov eax,[ebp+08] // 2nd Param [00000c3c](01) 50 push eax
[00000c3d](03) 8b4d08 mov ecx,[ebp+08] // 1st Param [00000c40](01) 51 push ecx
[00000c41](05) e820fdffff call 00000966 // call H
[00000c46](03) 83c408 add esp,+08
[00000c49](02) 85c0 test eax,eax
[00000c4b](02) 7402 jz 00000c4f
[00000c4d](02) ebfe jmp 00000c4d
[00000c4f](01) 5d pop ebp
[00000c50](01) c3 ret
Size in bytes:(0027) [00000c50]
_main()
[00000c56](01) 55 push ebp
[00000c57](02) 8bec mov ebp,esp
[00000c59](05) 68360c0000 push 00000c36 // push P
[00000c5e](05) 68360c0000 push 00000c36 // push P
[00000c63](05) e8fefcffff call 00000966 // call H(P,P) [00000c68](03) 83c408 add esp,+08
[00000c6b](01) 50 push eax
[00000c6c](05) 6857030000 push 00000357
[00000c71](05) e810f7ffff call 00000386
[00000c76](03) 83c408 add esp,+08
[00000c79](02) 33c0 xor eax,eax
[00000c7b](01) 5d pop ebp
[00000c7c](01) c3 ret
Size in bytes:(0039) [00000c7c]
machine stack stack machine assembly
address address data code language
======== ======== ======== ========= ============= [00000c56][0010172a][00000000] 55 push ebp [00000c57][0010172a][00000000] 8bec mov ebp,esp [00000c59][00101726][00000c36] 68360c0000 push 00000c36 // push P [00000c5e][00101722][00000c36] 68360c0000 push 00000c36 // push P [00000c63][0010171e][00000c68] e8fefcffff call 00000966 // call H(P,P)
Begin Local Halt Decider Simulation at Machine Address:c36 [00000c36][002117ca][002117ce] 55 push ebp [00000c37][002117ca][002117ce] 8bec mov ebp,esp [00000c39][002117ca][002117ce] 8b4508 mov eax,[ebp+08] [00000c3c][002117c6][00000c36] 50 push eax // push P
[00000c3d][002117c6][00000c36] 8b4d08 mov ecx,[ebp+08] [00000c40][002117c2][00000c36] 51 push ecx // push P
[00000c41][002117be][00000c46] e820fdffff call 00000966 // call H(P,P)
We can see that the first seven lines of P repeat. P calls H(P,P) that simulates P(P) that calls H(P,P) in a cycle the never stops unless H
stops simulating its input. When H does stop simulating its input P
never reaches its final state of [00000c50] therefore never halts even
though it stops running.
[00000c36][0025c1f2][0025c1f6] 55 push ebp [00000c37][0025c1f2][0025c1f6] 8bec mov ebp,esp [00000c39][0025c1f2][0025c1f6] 8b4508 mov eax,[ebp+08] [00000c3c][0025c1ee][00000c36] 50 push eax // push P
[00000c3d][0025c1ee][00000c36] 8b4d08 mov ecx,[ebp+08] [00000c40][0025c1ea][00000c36] 51 push ecx // push P
[00000c41][0025c1e6][00000c46] e820fdffff call 00000966 // call H(P,P) Local Halt Decider: Infinite Recursion Detected Simulation Stopped
[00000c68][0010172a][00000000] 83c408 add esp,+08 [00000c6b][00101726][00000000] 50 push eax [00000c6c][00101722][00000357] 6857030000 push 00000357 [00000c71][00101722][00000357] e810f7ffff call 00000386
Input_Halts = 0
[00000c76][0010172a][00000000] 83c408 add esp,+08 [00000c79][0010172a][00000000] 33c0 xor eax,eax [00000c7b][0010172e][00100000] 5d pop ebp [00000c7c][00101732][00000068] c3 ret Number_of_User_Instructions(27)
Number of Instructions Executed(23721)
*Strachey, C 1965* An impossible program The Computer Journal, Volume
7, Issue 4, January 1965, Page 313, https://doi.org/10.1093/comjnl/7.4.313
*Linz, Peter 1990* An Introduction to Formal Languages and Automata. Lexington/Toronto: D. C. Heath and Company.
On Saturday, 14 August 2021 at 23:18:03 UTC+8, olcott wrote:
This exact same analysis always applies to the input to H(P,P) no matter
how it is called including this example:
int main()
{
P((u32)P);
}
the Turing machine halting problem. Simply stated, the problem
is: given the description of a Turing machine M and an input w,
does M, when started in the initial configuration q0w, perform a
computation that eventually halts? (Linz:1990:317).
In computability theory, the halting problem is the problem of
determining, from a description of an arbitrary computer program
and an input, whether the program will finish running, or continue
to run forever. https://en.wikipedia.org/wiki/Halting_problem
Because the halting problem only requires that the (at least partial)
halt decider decide its input correctly the fact that the direct
invocation of P(P) is not an input to H, means that it is not relevant
to the halting problem.
I do not know English well, but I (almost every programmer) am sure the halting
problem means a program H decides whether P(input) will halt or not.
If the quoted texts is read to you differently, it is the problem of that texts.
Submit message to the authors.
If the direct invocation of P(P) is not relevant to the halting problem, then H can do whatever you like, therefore, meaningless if not garbage.
The P(P) of main() only halts because H(P,P) correctly decides that its
input never halts. This cause-and-effect relationship between the
simulated P and the executed P proves that the simulated P and the
executed P are distinctly different computations.
Because they are different computations the fact that the executed P
halts does not contradict the fact that the simulated P never halts.
While H remains in pure simulation mode simulating the input to H(P,P)
this simulated input never halts thus conclusively proving that H
decides this input correctly.
Because H only acts as a pure simulator of its input until after its
halt status decision has been made it has no behavior that can possibly
effect the behavior of its input. Because of this H screens out its own
address range in every execution trace that it examines. This is why we
never see any instructions of H in any execution trace after an input
calls H.
*Halting computation* is any computation that eventually reaches its own
final state. This criteria divides computations that halt from those
that merely stop running because their simulation was aborted.
A Turing machine is said to halt whenever it reaches a configuration
for which δ is not defined; this is possible because δ is a partial
function. In fact, we will assume that no transitions are defined for
any final state, so the Turing machine will halt whenever it enters a
final state. (Linz:1990:234)
// Simplified Linz Ĥ (Linz:1990:319)
// Strachey(1965) CPL translated to C
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
int main()
{
Output("Input_Halts = ", H((u32)P, (u32)P));
}
_P()
[00000c36](01) 55 push ebp
[00000c37](02) 8bec mov ebp,esp
[00000c39](03) 8b4508 mov eax,[ebp+08] // 2nd Param
[00000c3c](01) 50 push eax
[00000c3d](03) 8b4d08 mov ecx,[ebp+08] // 1st Param
[00000c40](01) 51 push ecx
[00000c41](05) e820fdffff call 00000966 // call H
[00000c46](03) 83c408 add esp,+08
[00000c49](02) 85c0 test eax,eax
[00000c4b](02) 7402 jz 00000c4f
[00000c4d](02) ebfe jmp 00000c4d
[00000c4f](01) 5d pop ebp
[00000c50](01) c3 ret
Size in bytes:(0027) [00000c50]
_main()
[00000c56](01) 55 push ebp
[00000c57](02) 8bec mov ebp,esp
[00000c59](05) 68360c0000 push 00000c36 // push P
[00000c5e](05) 68360c0000 push 00000c36 // push P
[00000c63](05) e8fefcffff call 00000966 // call H(P,P)
[00000c68](03) 83c408 add esp,+08
[00000c6b](01) 50 push eax
[00000c6c](05) 6857030000 push 00000357
[00000c71](05) e810f7ffff call 00000386
[00000c76](03) 83c408 add esp,+08
[00000c79](02) 33c0 xor eax,eax
[00000c7b](01) 5d pop ebp
[00000c7c](01) c3 ret
Size in bytes:(0039) [00000c7c]
machine stack stack machine assembly
address address data code language
======== ======== ======== ========= =============
[00000c56][0010172a][00000000] 55 push ebp
[00000c57][0010172a][00000000] 8bec mov ebp,esp
[00000c59][00101726][00000c36] 68360c0000 push 00000c36 // push P
[00000c5e][00101722][00000c36] 68360c0000 push 00000c36 // push P
[00000c63][0010171e][00000c68] e8fefcffff call 00000966 // call H(P,P)
Begin Local Halt Decider Simulation at Machine Address:c36
[00000c36][002117ca][002117ce] 55 push ebp
[00000c37][002117ca][002117ce] 8bec mov ebp,esp
[00000c39][002117ca][002117ce] 8b4508 mov eax,[ebp+08]
[00000c3c][002117c6][00000c36] 50 push eax // push P
[00000c3d][002117c6][00000c36] 8b4d08 mov ecx,[ebp+08]
[00000c40][002117c2][00000c36] 51 push ecx // push P
[00000c41][002117be][00000c46] e820fdffff call 00000966 // call H(P,P)
We can see that the first seven lines of P repeat. P calls H(P,P) that
simulates P(P) that calls H(P,P) in a cycle the never stops unless H
stops simulating its input. When H does stop simulating its input P
never reaches its final state of [00000c50] therefore never halts even
though it stops running.
[00000c36][0025c1f2][0025c1f6] 55 push ebp
[00000c37][0025c1f2][0025c1f6] 8bec mov ebp,esp
[00000c39][0025c1f2][0025c1f6] 8b4508 mov eax,[ebp+08]
[00000c3c][0025c1ee][00000c36] 50 push eax // push P
[00000c3d][0025c1ee][00000c36] 8b4d08 mov ecx,[ebp+08]
[00000c40][0025c1ea][00000c36] 51 push ecx // push P
[00000c41][0025c1e6][00000c46] e820fdffff call 00000966 // call H(P,P)
Local Halt Decider: Infinite Recursion Detected Simulation Stopped
[00000c68][0010172a][00000000] 83c408 add esp,+08
[00000c6b][00101726][00000000] 50 push eax
[00000c6c][00101722][00000357] 6857030000 push 00000357
[00000c71][00101722][00000357] e810f7ffff call 00000386
Input_Halts = 0
[00000c76][0010172a][00000000] 83c408 add esp,+08
[00000c79][0010172a][00000000] 33c0 xor eax,eax
[00000c7b][0010172e][00100000] 5d pop ebp
[00000c7c][00101732][00000068] c3 ret
Number_of_User_Instructions(27)
Number of Instructions Executed(23721)
*Strachey, C 1965* An impossible program The Computer Journal, Volume
7, Issue 4, January 1965, Page 313, https://doi.org/10.1093/comjnl/7.4.313 >>
*Linz, Peter 1990* An Introduction to Formal Languages and Automata.
Lexington/Toronto: D. C. Heath and Company.
--
Copyright 2021 Pete Olcott
"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
On Sunday, 15 August 2021 at 00:16:20 UTC+8, olcott wrote:
On 8/14/2021 11:05 AM, wij wrote:
On Saturday, 14 August 2021 at 23:18:03 UTC+8, olcott wrote:The quoted texts are accurate. The (at least partial) halt decider must
This exact same analysis always applies to the input to H(P,P) no matter >>>> how it is called including this example:
int main()
{
P((u32)P);
}
the Turing machine halting problem. Simply stated, the problem
is: given the description of a Turing machine M and an input w,
does M, when started in the initial configuration q0w, perform a
computation that eventually halts? (Linz:1990:317).
In computability theory, the halting problem is the problem of
determining, from a description of an arbitrary computer program
and an input, whether the program will finish running, or continue
to run forever. https://en.wikipedia.org/wiki/Halting_problem
Because the halting problem only requires that the (at least partial)
halt decider decide its input correctly the fact that the direct
invocation of P(P) is not an input to H, means that it is not relevant >>>> to the halting problem.
I do not know English well, but I (almost every programmer) am sure the halting
problem means a program H decides whether P(input) will halt or not.
If the quoted texts is read to you differently, it is the problem of that texts.
Submit message to the authors.
only correctly decide the halt status of its input. Computations that
are not inputs to the halt decider do not pertain to the halting problem.
Obviously the quoted text means differently to you and almost all programmers in
the world. You are addressing your own interpretation. This is OK, but the interpretation is meaningless.
If the direct invocation of P(P) is not relevant to the halting problem, thenThe halting problem is only concerned with an at least partial halt
H can do whatever you like, therefore, meaningless if not garbage.
decider correctly deciding whether or not its input halts, thus it can
do whatever its wants as long as it does decide the correct halt status
of its input.
int H2(Prog P) {
return 0;
}
What is the difference of your H with H2?
H2 can also correctly (at least partial) answer the halting problem, and can be verified.
In every configuration H does correctly decide that its input (P,P)
never halts. This can be verified beyond all possible doubt by the x86
execution trace of the simulation of P(P) shown below.
The P(P) of main() only halts because H(P,P) correctly decides that its >>>> input never halts. This cause-and-effect relationship between the
simulated P and the executed P proves that the simulated P and the
executed P are distinctly different computations.
Because they are different computations the fact that the executed P
halts does not contradict the fact that the simulated P never halts.
While H remains in pure simulation mode simulating the input to H(P,P) >>>> this simulated input never halts thus conclusively proving that H
decides this input correctly.
Because H only acts as a pure simulator of its input until after its
halt status decision has been made it has no behavior that can possibly >>>> effect the behavior of its input. Because of this H screens out its own >>>> address range in every execution trace that it examines. This is why we >>>> never see any instructions of H in any execution trace after an input
calls H.
*Halting computation* is any computation that eventually reaches its own >>>> final state. This criteria divides computations that halt from those
that merely stop running because their simulation was aborted.
A Turing machine is said to halt whenever it reaches a configuration
for which δ is not defined; this is possible because δ is a partial
function. In fact, we will assume that no transitions are defined for
any final state, so the Turing machine will halt whenever it enters a
final state. (Linz:1990:234)
// Simplified Linz Ĥ (Linz:1990:319)
// Strachey(1965) CPL translated to C
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
int main()
{
Output("Input_Halts = ", H((u32)P, (u32)P));
}
_P()
[00000c36](01) 55 push ebp
[00000c37](02) 8bec mov ebp,esp
[00000c39](03) 8b4508 mov eax,[ebp+08] // 2nd Param
[00000c3c](01) 50 push eax
[00000c3d](03) 8b4d08 mov ecx,[ebp+08] // 1st Param
[00000c40](01) 51 push ecx
[00000c41](05) e820fdffff call 00000966 // call H
[00000c46](03) 83c408 add esp,+08
[00000c49](02) 85c0 test eax,eax
[00000c4b](02) 7402 jz 00000c4f
[00000c4d](02) ebfe jmp 00000c4d
[00000c4f](01) 5d pop ebp
[00000c50](01) c3 ret
Size in bytes:(0027) [00000c50]
_main()
[00000c56](01) 55 push ebp
[00000c57](02) 8bec mov ebp,esp
[00000c59](05) 68360c0000 push 00000c36 // push P
[00000c5e](05) 68360c0000 push 00000c36 // push P
[00000c63](05) e8fefcffff call 00000966 // call H(P,P)
[00000c68](03) 83c408 add esp,+08
[00000c6b](01) 50 push eax
[00000c6c](05) 6857030000 push 00000357
[00000c71](05) e810f7ffff call 00000386
[00000c76](03) 83c408 add esp,+08
[00000c79](02) 33c0 xor eax,eax
[00000c7b](01) 5d pop ebp
[00000c7c](01) c3 ret
Size in bytes:(0039) [00000c7c]
machine stack stack machine assembly
address address data code language
======== ======== ======== ========= =============
[00000c56][0010172a][00000000] 55 push ebp
[00000c57][0010172a][00000000] 8bec mov ebp,esp
[00000c59][00101726][00000c36] 68360c0000 push 00000c36 // push P
[00000c5e][00101722][00000c36] 68360c0000 push 00000c36 // push P
[00000c63][0010171e][00000c68] e8fefcffff call 00000966 // call H(P,P) >>>>
Begin Local Halt Decider Simulation at Machine Address:c36
[00000c36][002117ca][002117ce] 55 push ebp
[00000c37][002117ca][002117ce] 8bec mov ebp,esp
[00000c39][002117ca][002117ce] 8b4508 mov eax,[ebp+08]
[00000c3c][002117c6][00000c36] 50 push eax // push P
[00000c3d][002117c6][00000c36] 8b4d08 mov ecx,[ebp+08]
[00000c40][002117c2][00000c36] 51 push ecx // push P
[00000c41][002117be][00000c46] e820fdffff call 00000966 // call H(P,P) >>>>
We can see that the first seven lines of P repeat. P calls H(P,P) that >>>> simulates P(P) that calls H(P,P) in a cycle the never stops unless H
stops simulating its input. When H does stop simulating its input P
never reaches its final state of [00000c50] therefore never halts even >>>> though it stops running.
[00000c36][0025c1f2][0025c1f6] 55 push ebp
[00000c37][0025c1f2][0025c1f6] 8bec mov ebp,esp
[00000c39][0025c1f2][0025c1f6] 8b4508 mov eax,[ebp+08]
[00000c3c][0025c1ee][00000c36] 50 push eax // push P
[00000c3d][0025c1ee][00000c36] 8b4d08 mov ecx,[ebp+08]
[00000c40][0025c1ea][00000c36] 51 push ecx // push P
[00000c41][0025c1e6][00000c46] e820fdffff call 00000966 // call H(P,P) >>>> Local Halt Decider: Infinite Recursion Detected Simulation Stopped
[00000c68][0010172a][00000000] 83c408 add esp,+08
[00000c6b][00101726][00000000] 50 push eax
[00000c6c][00101722][00000357] 6857030000 push 00000357
[00000c71][00101722][00000357] e810f7ffff call 00000386
Input_Halts = 0
[00000c76][0010172a][00000000] 83c408 add esp,+08
[00000c79][0010172a][00000000] 33c0 xor eax,eax
[00000c7b][0010172e][00100000] 5d pop ebp
[00000c7c][00101732][00000068] c3 ret
Number_of_User_Instructions(27)
Number of Instructions Executed(23721)
*Strachey, C 1965* An impossible program The Computer Journal, Volume
7, Issue 4, January 1965, Page 313, https://doi.org/10.1093/comjnl/7.4.313 >>>>
*Linz, Peter 1990* An Introduction to Formal Languages and Automata.
Lexington/Toronto: D. C. Heath and Company.
--
Copyright 2021 Pete Olcott
"Great spirits have always encountered violent opposition from mediocre >>>> minds." Einstein
--
Copyright 2021 Pete Olcott
"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
On 8/14/21 1:22 PM, olcott wrote:
On 8/14/2021 11:35 AM, wij wrote:
On Sunday, 15 August 2021 at 00:16:20 UTC+8, olcott wrote:
On 8/14/2021 11:05 AM, wij wrote:
On Saturday, 14 August 2021 at 23:18:03 UTC+8, olcott wrote:The quoted texts are accurate. The (at least partial) halt decider must >>>> only correctly decide the halt status of its input. Computations that
This exact same analysis always applies to the input to H(P,P) no
matter
how it is called including this example:
int main()
{
P((u32)P);
}
the Turing machine halting problem. Simply stated, the problem
is: given the description of a Turing machine M and an input w,
does M, when started in the initial configuration q0w, perform a
computation that eventually halts? (Linz:1990:317).
In computability theory, the halting problem is the problem of
determining, from a description of an arbitrary computer program
and an input, whether the program will finish running, or continue >>>>>> to run forever. https://en.wikipedia.org/wiki/Halting_problem
Because the halting problem only requires that the (at least partial) >>>>>> halt decider decide its input correctly the fact that the direct
invocation of P(P) is not an input to H, means that it is not relevant >>>>>> to the halting problem.
I do not know English well, but I (almost every programmer) am sure
the halting
problem means a program H decides whether P(input) will halt or not. >>>>> If the quoted texts is read to you differently, it is the problem of >>>>> that texts.
Submit message to the authors.
are not inputs to the halt decider do not pertain to the halting
problem.
Obviously the quoted text means differently to you and almost all
programmers in
the world. You are addressing your own interpretation. This is OK, but
the
interpretation is meaningless.
"the description of a Turing machine M" does not mean Turing machine M.
If people interpret this to mean Turing machine M they are wrong.
The INPUT is the description of Turing Machine M.
The answer is about the behavior of Turing Machine M, which, as pointed
out, is NOT the input.
On Saturday, August 14, 2021 at 9:06:27 AM UTC-7, olcott wrote:
the Turing machine halting problem. Simply stated, the problem
is: given the description of a Turing machine M and an input w,
does M, when started in the initial configuration q0w, perform a
computation that eventually halts? (Linz:1990:317).
That is not a proper statement of what is at stake. The theorem
is that there does not exist a Turing Machine which, given the
description of another Turing Machine, can determine whether
or not the second Turing Machine halts. The proof is that if such
a first Turing Machine were to exist we can construction a
second machine for which the first machine determines halting
incorrectly.
On 8/14/21 2:33 PM, olcott wrote:
On 8/14/2021 12:10 PM, Richard Damon wrote:
On 8/14/21 12:16 PM, olcott wrote:The input "description of an arbitrary computer program" is the basis
On 8/14/2021 11:05 AM, wij wrote:
On Saturday, 14 August 2021 at 23:18:03 UTC+8, olcott wrote:
This exact same analysis always applies to the input to H(P,P) noI do not know English well, but I (almost every programmer) am sure >>>>> the halting
matter
how it is called including this example:
int main()
{
P((u32)P);
}
the Turing machine halting problem. Simply stated, the problem
is: given the description of a Turing machine M and an input w,
does M, when started in the initial configuration q0w, perform a
computation that eventually halts? (Linz:1990:317).
In computability theory, the halting problem is the problem of
determining, from a description of an arbitrary computer program
and an input, whether the program will finish running, or continue >>>>>> to run forever. https://en.wikipedia.org/wiki/Halting_problem
Because the halting problem only requires that the (at least partial) >>>>>> halt decider decide its input correctly the fact that the direct
invocation of P(P) is not an input to H, means that it is not relevant >>>>>> to the halting problem.
problem means a program H decides whether P(input) will halt or not. >>>>> If the quoted texts is read to you differently, it is the problem of >>>>> that texts.
Submit message to the authors.
The quoted texts are accurate. The (at least partial) halt decider must >>>> only correctly decide the halt status of its input. Computations that
are not inputs to the halt decider do not pertain to the halting
problem.
This is the point where you use of English is incorrect, and you need to >>> restudy English so you understand what you are saying.
*Inputs* are NEVER *Computations* in and of themselves, but are merely
the string representations of the ACTUAL Computations.
As such, 'inputs' don't halt or be non-halting, only the machines they
represent.
for the halt status decision.
The input is what the program uses to make its decision, the right
answer is what the actual machine does.
You don't seem to understand the difference.
The program uses unsound logic in its analysis and thus gets a wrong
answer. (It assumes that H will NEVER abort, when it just is a won't
abort until type of program). Until is not Never, so it get the answer
wrong.
olcott <NoOne@NoWhere.com> writes:
The P(P) of main() only halts because...
As you say, P(P) halts.
*Halting computation* is any computation that eventually reaches its
own final state. This criteria divides computations that halt from
those that merely stop running because their simulation was aborted.
No. There is no "special kind of halting". The computation M(I) either halts or it does not. H(M, I) should be false if, and only if, M(I)
does not halt.
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
P(P) halts, yet H(P, P) is false. That's the wrong answer.
Why are you still hiding H? Is it because you have still not figured
out how to nest a call to the simulator you are using?
Fortunately "we"
(i.e. everyone but you) can see that H is wrong without even seeing the
code. Who is included in the "we" of the subject line? Have you found someone else who thinks that false is the correct return from a partial
halt decider called with arguments that represent a halting computation?
On Sunday, 15 August 2021 at 05:39:10 UTC+1, olcott wrote:
On 8/14/2021 5:56 PM, Ben Bacarisse wrote:We can write a ZX81 emulator on a modern machine. A ZX81 has 4K ROM
Jeff Barnett <j...@notatt.com> writes:No this is not possible. There is no possible way to use ordinary
On 8/14/2021 2:43 PM, Ben Bacarisse wrote:
olcott <No...@NoWhere.com> writes:I have questions about the PO simulator I hope someone can answer. It
The P(P) of main() only halts because...As you say, P(P) halts.
*Halting computation* is any computation that eventually reaches its >>>>>> own final state. This criteria divides computations that halt from >>>>>> those that merely stop running because their simulation was aborted. >>>>> No. There is no "special kind of halting". The computation M(I) either >>>>> halts or it does not. H(M, I) should be false if, and only if, M(I)does not halt.
void P(u32 x)P(P) halts, yet H(P, P) is false. That's the wrong answer.
{
if (H(x, x))
HERE: goto HERE;
}
Why are you still hiding H? Is it because you have still not figured >>>>> out how to nest a call to the simulator you are using? Fortunately "we" >>>>> (i.e. everyone but you) can see that H is wrong without even seeing the >>>>> code. Who is included in the "we" of the subject line? Have you found >>>>> someone else who thinks that false is the correct return from a partial >>>>> halt decider called with arguments that represent a halting computation? >>>>
perhaps concerns memory mapping: First - is every instance of a use at >>>> different levels in its own address space? Second - if not, is there
any way to know when an address is reported, which simulator instance
is being reported on? When the dumb bunny (PO expression) notes that
the same address is reached a second time without a conditional branch >>>> being executed, is there any assurance that the addresses are noted
from the same instance of the simulation? And finally, how can one
determine if it's the same address twice without doing some sort of
compare and branch? Thanks in advance for any sort of enlightenment.
You won't get a straight answer from PO, but I don't think there is any
nested simulation happening at all. PO "knows" it's that same a
recursion, so he just has recursive calls traced from "outside". I may
recursion to implement nested x86 emulation without memory corruption of
the stack. I explained all of the technical details of context
switching: Here is a link that does a better job:
https://en.wikipedia.org/wiki/Context_switch
Each virtual machine has its own registers, stack and RAM. Once the
virtual machine environment is set up, allocating the stack and RAM and
other house keeping functions a context switch only requires saving and
restoring all the machine registers.
and 1K RAM. So our first line can be a "virualmem = malloc(1024 * 5). We then set up everything else in that memory space.
However the ZX81 emulator cannot emulate another ZX81, since it has only
1K RAM to play with, and the virtual machine needs 5K.
You'll get this problem whenever you try to allow nested emulation on a random-access memory model machine.
Turing machines don't have this problem. Write a UTM, and a "Hello world" program, and
UTM<Hello> with output "Hello world" on the tape.
UTM<UTM><Hello> will also output "Hello world" on the tape. You can stack up as many UTMs as you like without any reprogramming. It might get very slow, but it will eventually finish.
What you can do is treat memory allocation as a special function. Then you can nest simulations.
On Sunday, 15 August 2021 at 21:45:09 UTC+8, olcott wrote:
On 8/15/2021 2:50 AM, wij wrote:
On Sunday, 15 August 2021 at 02:24:42 UTC+8, olcott wrote:This text right here is correct:
On 8/14/2021 1:09 PM, wij wrote:
On Sunday, 15 August 2021 at 01:22:11 UTC+8, olcott wrote:I think that the problem is that your English is not so good.
On 8/14/2021 11:35 AM, wij wrote:
On Sunday, 15 August 2021 at 00:16:20 UTC+8, olcott wrote:"the description of a Turing machine M" does not mean Turing machine M. >>>>>> If people interpret this to mean Turing machine M they are wrong.
On 8/14/2021 11:05 AM, wij wrote:
On Saturday, 14 August 2021 at 23:18:03 UTC+8, olcott wrote: >>>>>>>>>> This exact same analysis always applies to the input to H(P,P) no matterThe quoted texts are accurate. The (at least partial) halt decider must
how it is called including this example:
int main()
{
P((u32)P);
}
the Turing machine halting problem. Simply stated, the problem >>>>>>>>>> is: given the description of a Turing machine M and an input w, >>>>>>>>>> does M, when started in the initial configuration q0w, perform a >>>>>>>>>> computation that eventually halts? (Linz:1990:317).
In computability theory, the halting problem is the problem of >>>>>>>>>> determining, from a description of an arbitrary computer program >>>>>>>>>> and an input, whether the program will finish running, or continue >>>>>>>>>> to run forever. https://en.wikipedia.org/wiki/Halting_problem >>>>>>>>>>
Because the halting problem only requires that the (at least partial)
halt decider decide its input correctly the fact that the direct >>>>>>>>>> invocation of P(P) is not an input to H, means that it is not relevant
to the halting problem.
I do not know English well, but I (almost every programmer) am sure the halting
problem means a program H decides whether P(input) will halt or not. >>>>>>>>> If the quoted texts is read to you differently, it is the problem of that texts.
Submit message to the authors.
only correctly decide the halt status of its input. Computations that >>>>>>>> are not inputs to the halt decider do not pertain to the halting problem.
Obviously the quoted text means differently to you and almost all programmers in
the world. You are addressing your own interpretation. This is OK, but the
interpretation is meaningless.
Then, both Linz and the author of https://en.wikipedia.org/wiki/Halting_problem
are also wrong, I and almost all programmers in the world can guarantee you this.
If both authors are also wrong, replying the rest message is meaningless. >>>>> You need to submit your interpretation to Linz and the author of the wiki.
The Linz text and the Wiki text are correct.
Linz retired many years ago.
In your recent post somewhere, you said:
"I made my refutation of Linz a little more clear by changing all of the >>> subscripts to be numeric. My refutation of Linz cannot be properly
understood until after my refutation of simplified Linz / Strachey is
first understood..."
Now, you changed mind to say "The Linz text and the Wiki text are correct." >>>
the Turing machine halting problem. Simply stated, the problem
is: given the description of a Turing machine M and an input w,
does M, when started in the initial configuration q0w, perform a
computation that eventually halts? (Linz:1990:317).
In computability theory, the halting problem is the problem of
determining, from a description of an arbitrary computer program
and an input, whether the program will finish running, or continue
to run forever. https://en.wikipedia.org/wiki/Halting_problem
All of the rest of the text that "proves" the halting problem cannot be
solved it incorrect.
Which one did you mean:
1. All of the rest of the text that "proves" the halting problem cannot be solved incorrect. (still ambiguous)
2. All of the rest of the text that "proves" the halting problem cannot
solve incorrect. (ambiguous)
3. All of the rest of the text that "proves" the halting problem cannot be solved, it is incorrect.
There are much more inconsistent statements in your posts, like "H is a totalH is a pure function of its inputs in that all of the nested simulations
function",...,etc. (I do not have time to re-find them).
are simply data derived entirely on the basis of this inputs.
From your description:
"The x86utm operating system uses a single contiguous block of RAM to
most precisely map to the concept of a single contiguous Turing machine
tape. All of the code and data of the virtual machines that it executes
are contained in this single contiguous block. There is no virtual
memory paging in the x86utm operating system."
I believe your H is a 'pure function', you are actually dealing with two "C" function calls. H is not really a simulator as you keeps calling it so.
Show me how H(P,P) takes its input P as 'simple data'.
I hate to say that your programming level is very low because this has noting to do with the HP proof. I think many others know x86 and C languages and programming skills better than you do. No need to repeat posting the compiled assembly code fragment and pretend you know better and others cannot see it.
What does your bible say about a liar? Does it matter? Surely, it does matter
if it applies to others, not you (you can restate it in your flavor).
Then, what else evil you cannot do, none.
子曰:人而無信不知其可
Confucius says: If a man does not keep his word, what is he good for?
My H has intelligence and can be verified to derive a halt status that >>>>>> corresponds to every halting computation and can be verified to derive a >>>>>> halt status that corresponds to that halt status of every input that it >>>>>> determines never halts.If the direct invocation of P(P) is not relevant to the halting problem, thenThe halting problem is only concerned with an at least partial halt >>>>>>>> decider correctly deciding whether or not its input halts, thus it can >>>>>>>> do whatever its wants as long as it does decide the correct halt status
H can do whatever you like, therefore, meaningless if not garbage. >>>>>>>>>
of its input.
int H2(Prog P) {
return 0;
}
What is the difference of your H with H2?
H2 can also correctly (at least partial) answer the halting problem, and can
be verified.
H is always correct for all:
(a) halting computations.
(b) computations that it decides never halt.
In every configuration H does correctly decide that its input (P,P) >>>>>>>> never halts. This can be verified beyond all possible doubt by the x86 >>>>>>>> execution trace of the simulation of P(P) shown below.
The P(P) of main() only halts because H(P,P) correctly decides that its
input never halts. This cause-and-effect relationship between the >>>>>>>>>> simulated P and the executed P proves that the simulated P and the >>>>>>>>>> executed P are distinctly different computations.
Because they are different computations the fact that the executed P >>>>>>>>>> halts does not contradict the fact that the simulated P never halts. >>>>>>>>>>
While H remains in pure simulation mode simulating the input to H(P,P)
this simulated input never halts thus conclusively proving that H >>>>>>>>>> decides this input correctly.
Because H only acts as a pure simulator of its input until after its >>>>>>>>>> halt status decision has been made it has no behavior that can possibly
effect the behavior of its input. Because of this H screens out its own
address range in every execution trace that it examines. This is why we
never see any instructions of H in any execution trace after an input
calls H.
*Halting computation* is any computation that eventually reaches its own
final state. This criteria divides computations that halt from those >>>>>>>>>> that merely stop running because their simulation was aborted. >>>>>>>>>>
A Turing machine is said to halt whenever it reaches a configuration >>>>>>>>>> for which δ is not defined; this is possible because δ is a partial
function. In fact, we will assume that no transitions are defined for
any final state, so the Turing machine will halt whenever it enters a
final state. (Linz:1990:234)
// Simplified Linz Ĥ (Linz:1990:319)
// Strachey(1965) CPL translated to C
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
int main()
{
Output("Input_Halts = ", H((u32)P, (u32)P));
}
_P()
[00000c36](01) 55 push ebp
[00000c37](02) 8bec mov ebp,esp
[00000c39](03) 8b4508 mov eax,[ebp+08] // 2nd Param
[00000c3c](01) 50 push eax
[00000c3d](03) 8b4d08 mov ecx,[ebp+08] // 1st Param
[00000c40](01) 51 push ecx
[00000c41](05) e820fdffff call 00000966 // call H
[00000c46](03) 83c408 add esp,+08
[00000c49](02) 85c0 test eax,eax
[00000c4b](02) 7402 jz 00000c4f
[00000c4d](02) ebfe jmp 00000c4d
[00000c4f](01) 5d pop ebp
[00000c50](01) c3 ret
Size in bytes:(0027) [00000c50]
_main()
[00000c56](01) 55 push ebp
[00000c57](02) 8bec mov ebp,esp
[00000c59](05) 68360c0000 push 00000c36 // push P
[00000c5e](05) 68360c0000 push 00000c36 // push P
[00000c63](05) e8fefcffff call 00000966 // call H(P,P)
[00000c68](03) 83c408 add esp,+08
[00000c6b](01) 50 push eax
[00000c6c](05) 6857030000 push 00000357
[00000c71](05) e810f7ffff call 00000386
[00000c76](03) 83c408 add esp,+08
[00000c79](02) 33c0 xor eax,eax
[00000c7b](01) 5d pop ebp
[00000c7c](01) c3 ret
Size in bytes:(0039) [00000c7c]
machine stack stack machine assembly
address address data code language
======== ======== ======== ========= =============
[00000c56][0010172a][00000000] 55 push ebp
[00000c57][0010172a][00000000] 8bec mov ebp,esp
[00000c59][00101726][00000c36] 68360c0000 push 00000c36 // push P >>>>>>>>>> [00000c5e][00101722][00000c36] 68360c0000 push 00000c36 // push P >>>>>>>>>> [00000c63][0010171e][00000c68] e8fefcffff call 00000966 // call H(P,P)
Begin Local Halt Decider Simulation at Machine Address:c36 >>>>>>>>>> [00000c36][002117ca][002117ce] 55 push ebp
[00000c37][002117ca][002117ce] 8bec mov ebp,esp
[00000c39][002117ca][002117ce] 8b4508 mov eax,[ebp+08]
[00000c3c][002117c6][00000c36] 50 push eax // push P
[00000c3d][002117c6][00000c36] 8b4d08 mov ecx,[ebp+08]
[00000c40][002117c2][00000c36] 51 push ecx // push P
[00000c41][002117be][00000c46] e820fdffff call 00000966 // call H(P,P)
We can see that the first seven lines of P repeat. P calls H(P,P) that
simulates P(P) that calls H(P,P) in a cycle the never stops unless H >>>>>>>>>> stops simulating its input. When H does stop simulating its input P >>>>>>>>>> never reaches its final state of [00000c50] therefore never halts even
though it stops running.
[00000c36][0025c1f2][0025c1f6] 55 push ebp
[00000c37][0025c1f2][0025c1f6] 8bec mov ebp,esp
[00000c39][0025c1f2][0025c1f6] 8b4508 mov eax,[ebp+08]
[00000c3c][0025c1ee][00000c36] 50 push eax // push P
[00000c3d][0025c1ee][00000c36] 8b4d08 mov ecx,[ebp+08]
[00000c40][0025c1ea][00000c36] 51 push ecx // push P
[00000c41][0025c1e6][00000c46] e820fdffff call 00000966 // call H(P,P)
Local Halt Decider: Infinite Recursion Detected Simulation Stopped >>>>>>>>>>
[00000c68][0010172a][00000000] 83c408 add esp,+08
[00000c6b][00101726][00000000] 50 push eax
[00000c6c][00101722][00000357] 6857030000 push 00000357
[00000c71][00101722][00000357] e810f7ffff call 00000386
Input_Halts = 0
[00000c76][0010172a][00000000] 83c408 add esp,+08
[00000c79][0010172a][00000000] 33c0 xor eax,eax
[00000c7b][0010172e][00100000] 5d pop ebp
[00000c7c][00101732][00000068] c3 ret
Number_of_User_Instructions(27)
Number of Instructions Executed(23721)
*Strachey, C 1965* An impossible program The Computer Journal, Volume
7, Issue 4, January 1965, Page 313, https://doi.org/10.1093/comjnl/7.4.313
*Linz, Peter 1990* An Introduction to Formal Languages and Automata. >>>>>>>>>> Lexington/Toronto: D. C. Heath and Company.
--
Copyright 2021 Pete Olcott
"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
--
Copyright 2021 Pete Olcott
"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
--
Copyright 2021 Pete Olcott
"Great spirits have always encountered violent opposition from mediocre >>>>>> minds." Einstein
--
Copyright 2021 Pete Olcott
"Great spirits have always encountered violent opposition from mediocre >>>> minds." Einstein
--
Copyright 2021 Pete Olcott
"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
On 14/08/2021 22:20, Jeff Barnett wrote:
On 8/14/2021 2:43 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
The P(P) of main() only halts because...
As you say, P(P) halts.
*Halting computation* is any computation that eventually reaches its
own final state. This criteria divides computations that halt from
those that merely stop running because their simulation was aborted.
No. There is no "special kind of halting". The computation M(I) either >>> halts or it does not. H(M, I) should be false if, and only if, M(I)
does not halt.
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
P(P) halts, yet H(P, P) is false. That's the wrong answer.
Why are you still hiding H? Is it because you have still not figured
out how to nest a call to the simulator you are using? Fortunately "we" >>> (i.e. everyone but you) can see that H is wrong without even seeing the
code. Who is included in the "we" of the subject line? Have you found >>> someone else who thinks that false is the correct return from a partial
halt decider called with arguments that represent a halting computation?
I have questions about the PO simulator I hope someone can answer. It
perhaps concerns memory mapping:
First - is every instance of a use at different levels in its own
address space?
I've tried to get PO to clarify that, and it always /seems/ that he is suggesting yes [while avoiding any direct answer] but I have no
confidence whatsoever that he understands what everybody else would understand by "its own address space".
He has definitely said that each simulation has its own stack and
registers, but my bet would be that they are more like your typical OS threads, running in the same address space. (We could probably find out
by quizzing him on sharing of globals etc. and giving him concrete
examples which he could understand. But it might take a lot of work,
and for what at the end? Or more reasonably, if he published all his
source code as he maintained he would for around two years, we could
answer these sorts of questions for ourselves...)
Second - if not, is there any way to know when an address is reported,
which simulator instance is being reported on?
I suggested he needed to provide that last year. And at one point he
DID change his trace to show the emulation level, so it's not like
there's any coding difficulty! But then it was perfectly clear that he
was correlating trace entries together from completely separate
emulation levels, so the illusion that it was a "loop" in the normal
(single) processor-trace sense was lessened. He subsequently removed
the column, claiming as excuse that it confused people.
I'd say this is PO misunderstanding the difference between
call-recursion and emulation-recursion. The former can /only/ be broken
by code at the deepest recursion level which then percolates up to the
top level, like when we calculate n factorial recursively. Emulation-recursion /can/ also break out this way, but with emulation
there is a second possibility - the break can be from the /top/ level
which simply decides not to emulate any more. The fact that the deepest inner emulations appear to be repeating doesn't mean that they will go
on forever, because an outer level can always just give up emulating and
get on with whatever is next.
I suppose without an emulation-id column we can probably work stuff out
based on the overall flow of the trace together with knowledge about the program and what H is doing and so on. (But why should this be required when it's an essential part of the meaning of a trace entry?)
When the dumb bunny (PO expression) notes that the same address is
reached a second time without a conditional branch being executed, is
there any assurance that the addresses are noted from the same
instance of the simulation?
I can give you an assurance of exactly the opposite - they are
definitely from /different/ emulation levels! (I think you know that, right?) PO tries to present them to look as much as possible like a
pattern of behaviour for a /single/ processor, because then he would
have "call recursion" which can only break inner-to-outer, and his
"processor trace" could provide some level of evidence that that won't happen. (Also I'm remebering his recent remarks about the processor "[..having no way to escape from the recursion..]" which might be
explained as PO not understanding the call/recursion distinction...)
In the past PO has said his rule applies equally for call-recursion and emulation-recursion, no difference, while repeating something about "equivalent computation", but he has no real /understanding/ of that
phrase and certainly no /proof/ of soundness even for the simple call-recursion case, so it's just the usual unsupported claims. (And
there is no prospect of ever going further than this - PO is simply not capable of "proving" anything and I doubt he understands what that even means.)
And finally, how can one determine if it's the same address twice
without doing some sort of compare and branch?
OK, for PO's H, there are obviously hidden conditional branch
instructions within H, which is why PO has to come up with some wording
to convince himself that H can be totally ignored for whatever reason.
But drilling down on this seems overkill when PO hasn't even presented
any plausible argument (let alone proof!) that the detection rule being
used is sound.
What would we be trying to disprove and why? :) PO has
agreed that H^(H^) halts, and that H(H^,H^) returns not-halting, so
that's it.
At least in the end it must be PO's responsibility to present /proofs/
of anything he claims, but now we've gone like 100 miles beyond his capabilities - a complete non-starter...
Mike.
On 15/08/2021 00:27, Richard Damon wrote:
On 8/14/21 6:56 PM, Ben Bacarisse wrote:
Jeff Barnett <jbb@notatt.com> writes:
On 8/14/2021 2:43 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
The P(P) of main() only halts because...As you say, P(P) halts.
*Halting computation* is any computation that eventually reaches its >>>>>> own final state. This criteria divides computations that halt from >>>>>> those that merely stop running because their simulation was aborted. >>>>> No. There is no "special kind of halting". The computation M(I)either
halts or it does not. H(M, I) should be false if, and only if, M(I) >>>>> does not halt.
void P(u32 x)P(P) halts, yet H(P, P) is false. That's the wrong answer.
{
if (H(x, x))
HERE: goto HERE;
}
Why are you still hiding H? Is it because you have still not figured >>>>> out how to nest a call to the simulator you are using? Fortunately
"we"
(i.e. everyone but you) can see that H is wrong without even seeing
the
code. Who is included in the "we" of the subject line? Have you
found
someone else who thinks that false is the correct return from a
partial
halt decider called with arguments that represent a halting
computation?
I have questions about the PO simulator I hope someone can answer. It
perhaps concerns memory mapping: First - is every instance of a use at >>>> different levels in its own address space? Second - if not, is there
any way to know when an address is reported, which simulator instance
is being reported on? When the dumb bunny (PO expression) notes that
the same address is reached a second time without a conditional branch >>>> being executed, is there any assurance that the addresses are noted
from the same instance of the simulation? And finally, how can one
determine if it's the same address twice without doing some sort of
compare and branch? Thanks in advance for any sort of enlightenment.
You won't get a straight answer from PO, but I don't think there is any
nested simulation happening at all. PO "knows" it's that same a
recursion, so he just has recursive calls traced from "outside". I may
be wrong, of course, but this is one reason I think H is being kept
hidden -- it does not do what says.
He actually has leaked a fair amount about how the system works. H isn't
actually a simulator, but an 'API Entry' into the x86utm system that has
the real simulator, and calls into H as supposed to setup a new 'nested'
level of simulation.
My impression is that H is part of the application code rather than an
OS call, but within H there are calls to PO's simulation primitives
which are trapped by x86utm.exe and implemented within x86utm. H would
still have the task of inspecting the (nested) emulation trace entries
to detect what it decides to be non-halting behaviour. (But then PO has talked about a "global decider" which is part of the OS, so maybe my impression is completely wrong! To be relevent to Linz, the deciding
logic at least must be in the application rather than in x86utm.)
It sounds like these nested simulations are given their own stacks and
'user' code isn't supposed to be able to store data anywhere but on the
stack, so that is supposed to be enough for a new environment, since he
erroneously puts everything inside one code segment. (This means that H
isn't a 'Universal' Halt Decider, as its input isn't an arbitrary
machine.
This would be one reason you can't 'copy' H, is that H isn't really the
code but just an API (and if he allowed copying, his nesting detection
breaks).
One side effect of this is that I am not sure if his system can actually
really handle finitely but multi-level simulations as at least some of
the leaked implementations made H not really a computation as it used
static memory to communicate between H and the OS.
I also wonder if a computation built on P1 using H to decide on P2 which
used H to decide on P3 could return the answer from P3 to P2.
This structure could be used to solve the twins prime conjecture if the
Halt decider actually worked. P1 would ask P2 to find the highest twin
prime. If it is non-halting there is no highest twin prime.
P2 would iterate through the twin primes starting at say 3,5 and ask P3
to find the next one. If it find one, then it updates to that point and
uses it again to find the next highest. If P2 is at the highest, then P3
would be non-halting, and P2 would get the non-halting answer and could
tell P1 what is the highest twin prime.
P3 just takes its input and searches to find the next highest twin prime
from there. If there isn't one it will just be non-halting.
The problem is that just because P3 becomes non-halting isn't grounds to
call P1 or P2 non-halting, as P3 becoming non-halting is the halting
condition of P2. It is only if for every problem that P2 gives P3 that
it always finds an answer that P2 becomes non-halting, and P1 then knows
that the answer to the question is that there is no highest twin prime.
(P1 halts in all cases).
The slight problem is that his current definition of H doesn't seem to
allow the caller of H to get the 'answer' from the machine it is
running, so you have to do everything twice, first determine that it
WOULD halt, then just call it to get the answer.
Maybe, but the emulating user code has access to the trace of the
emulated program, so in principle it should be able to work out what
that program returned. E.g. it can track that it finished by loading RAX
with (say) 1 then returned (terminated), meaning that it returned 1.
Mike.
olcott <NoOne@NoWhere.com> writes:
On 8/15/2021 3:31 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
If H(P, P) does not give the halting status of P(P) it is useless.
In other words your knowledge of infinite recursive invocation is on
par with your knowledge of operating system context switching?
P(P) halts.
Imagine if you'd been honest about this two and half years ago? "I have >>> a function H such that H(H_Hat, H_Hat) == 0 so H_Hat(H_Hat) halts." No
one would care.
I finally have this one untangled:
int main() { P(P); } is computationally equivalent to
int main() { Simulate(P,P); }
Because they are computationally equivalent they have the same halting
behavior, however:
Neither of them is computationally equivalent to the H(P,P) called
from P because the different placement in the execution trace changes
the halting behavior of P(P).
H(M, I) is supposed to report the halting or otherwise of M(I). You
don't claim that your H can do this in all cases, but you boasted (you
like boasting) that it did for the "hat" version of H, AKA P above. It
does not. P(P) halts but H(P, P) == 0. Boring.
On Wednesday, 18 August 2021 at 16:44:44 UTC+1, olcott wrote:
On 8/18/2021 10:28 AM, Malcolm McLean wrote:You're wrong here. When H is being called on a program which includes
On Wednesday, 18 August 2021 at 14:57:10 UTC+1, olcott wrote:Because H only acts as a pure simulator of its input until after
If H is analysing H, it can't ignore the behaviour of H. That's why your results
H has no effect on the machine that it simulates until after its halt
status decision has been made. This conclusively proves that H can
ignore its in execution trace during its halt status analysis.
Anyone disagreeing with this is either not intelligent or knowledgeable >>>> enough to understand it, or a liar.
That H does effect the behavior or its input at some other point is
utterly irrelevant to this analysis. We are only answering the single
question: Is it correct for H to ignore its own execution trace during >>>> its halt status analysis?
are wrong despite the execution trace seeming to show a non-halting
behaviour.
its halt status decision has been made it has no behavior that
can possibly effect the behavior of its input. Because of this H
screens out its own address range in every execution trace that
it examines. This is why we never see any instructions of H in
any execution trace after an input calls H.
The above proves itself true entirely on the basis of the meaning
of its words. There is no possible correct rebuttal there is only
a failure to comprehend. If you believe that there is a correct
rebuttal please provide it and I will point out your error.
a call to H, the nested call to H needs to be analysed like any other
call. It can and in fact does affect the halting behaviour of the input.
olcott <NoOne@NoWhere.com> writes:
On 8/18/2021 8:42 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/18/2021 8:16 PM, Ben Bacarisse wrote:
Yes. I cut them because they are not the specification of the function >>>>> that I will challenge you to write.
That is out-of-scope and you know it.
Not in my opinion, no. A function that that shows there are undecidable >>> sets should worry you, but for some reason you prefer to stick with
talking about your H that does something entirely unsurprising and
uninteresting.
So when I correctly refute the halting problem proofs you say no I did
not refute every proof in the universe and the halting problem proof
is one of these proofs therefore I did not refute the halting problem
proof.
No, I'm not saying that.
Anyway, in case you are interested, here is the specification of the
function you can't write:
The computational model is C code with no memory restrictions. Of
course, if you don't actually hit the memory limits of a C
implementation it's just actual C code. I'd be happy to say more about
this model of computation if you think the details will matter to your solution.
The problem is that of deciding if a function would return if called
from main. A "return decider" (in this model) is a C function returning _Bool that always returns a value to the expression in which it was
called. A return decider always returns the same value for any
arguments that represnet the same function call expression.
Your mission, should you chose to accept it, is to write a return
decider B with this prototype
typedef uintptr_t data;
typedef void (*function)(data);
extern _Bool B(function, data);
such that B(f, d) returns true if and only if a call of f from main with argument d returns to main. The two arguments, f and d, are said to represenet the call expression f(d).
If, rather than just thinking you can do this, you have actual C code,
you should provide either source or a compiled translation unit that can
be linked with this one:
#include <stdint.h>
#include <stdio.h>
typedef uintptr_t data;
typedef void (*function)(data);
extern _Bool B(function, data);
void B_hat(data x) { if (B((function)x, x)) while (1); }
int main(void)
{
printf("%d\n", B(B_hat, (data)B_hat));
fflush(stdout);
B_hat((data)B_hat);
puts("returned");
}
The output should be either
1
returned
or
0
with no further output. Of course you could always just agree that no
such function B can be written.
On Thursday, 19 August 2021 at 15:14:11 UTC+1, olcott wrote:
On 8/19/2021 5:26 AM, Malcolm McLean wrote:Let's forget LInz and take this simple function
On Wednesday, 18 August 2021 at 16:44:44 UTC+1, olcott wrote:You are doing as bad of a job analyzing this as Robert. You are making
On 8/18/2021 10:28 AM, Malcolm McLean wrote:You're wrong here. When H is being called on a program which includes
On Wednesday, 18 August 2021 at 14:57:10 UTC+1, olcott wrote:Because H only acts as a pure simulator of its input until after
If H is analysing H, it can't ignore the behaviour of H. That's why your results
H has no effect on the machine that it simulates until after its halt >>>>>> status decision has been made. This conclusively proves that H can >>>>>> ignore its in execution trace during its halt status analysis.
Anyone disagreeing with this is either not intelligent or knowledgeable >>>>>> enough to understand it, or a liar.
That H does effect the behavior or its input at some other point is >>>>>> utterly irrelevant to this analysis. We are only answering the single >>>>>> question: Is it correct for H to ignore its own execution trace during >>>>>> its halt status analysis?
are wrong despite the execution trace seeming to show a non-halting
behaviour.
its halt status decision has been made it has no behavior that
can possibly effect the behavior of its input. Because of this H
screens out its own address range in every execution trace that
it examines. This is why we never see any instructions of H in
any execution trace after an input calls H.
The above proves itself true entirely on the basis of the meaning
of its words. There is no possible correct rebuttal there is only
a failure to comprehend. If you believe that there is a correct
rebuttal please provide it and I will point out your error.
a call to H, the nested call to H needs to be analysed like any other
call. It can and in fact does affect the halting behaviour of the input.
sure to simply ignore key words that I have said.
WHILE H IS MAKING ITS HALT DECISION H IS ACTING AS A PURE SIMULATOR OF
ITS INPUT.
WHILE H IS ACTING AS A PURE SIMULATOR H CANNOT POSSIBLY HAVE ANY EFFECT
ON THE BEHAVIOR OF ITS INPUT.
WHILE H CANNOT POSSIBLY HAVE ANY EFFECT ON THE BEHAVIOR OF ITS INPUT H
NEED NOT EXAMINE ITS OWN EXECUTION TRACE IN ITS HALT STATUS DECISION.
Try and find a specific flaw in that, there are one.
void loopforever(U32 dummy)
{
while(1);
}
Now loopforever(dummy) doesn't halt, agreed?
this function
int H1(U32 dummy)
{
return H(loopforever, dummy);
}
halts and returns 0 (non-halting). Agreed?
Now consider this function
int H2(u32 dummy)
{
return H(H1, dummy);
}
What does that do?
olcott <NoOne@NoWhere.com> writes:
Ĥ applied to ⟨Ĥ⟩ halts.
Yes.
And on the 12th Aug you said, and I quote
"⟨Ĥ⟩ ⟨Ĥ⟩ is not a string that encodes a halting computation."
This is incorrect. You need to correct that statement so you can go on
to investigate the consequences. It's not a trivial error. It's
absolutely central to the case under investigation.
You are saying that Ĥ applied to ⟨Ĥ⟩ halts.
We are both saying that -- you said it above and of course I agree. The point of disagreement is that you said
"⟨Ĥ⟩ ⟨Ĥ⟩ is not a string that encodes a halting computation."
which is false. ⟨Ĥ⟩ ⟨Ĥ⟩ /is/ a string that encodes a halting computation.
I am saying that the input to Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ⟩ never halts.
I know you are. That may or may not mean the same as "⟨Ĥ⟩ ⟨Ĥ⟩ is not a
string that encodes a halting computation" (I think its does mean the
same, just poorly worded), but obviously I want to correct the clear and unambiguously wrong version from Aug 12th. So long as you refuse to
accept that ⟨Ĥ⟩ ⟨Ĥ⟩ is a string that encodes a halting computation, discussion is pointless.
Malcolm McLean <malcolm.arthur.mclean@gmail.com> writes:
On Friday, 20 August 2021 at 16:31:33 UTC+1, olcott wrote:
On 8/20/2021 10:10 AM, Ben Bacarisse wrote:H_Hat(H_Hat) halts, whilst H(H_Hat, H_Hat) returns false (non-halting).
You have to go though the following reasoning and point out the specific >>> error. Making a blanket assertion that there is an error somewhere does
You are not going to stay focused on the most serious error you have yet >>>> posted?
not count as any rebuttal at all.
Ĥ.q0 ⟨Ĥ⟩ ⊢* Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ⟩ ⊢* Ĥ.qn
The first (executed) Ĥ has a dependency on these two (simulated) ⟨Ĥ⟩ ⟨Ĥ⟩
that do not have a dependency on the first Ĥ, this makes their position >>> in the execution trace have an effect on their behavior.
Perhaps this is simply beyond your capacity to understand?
From this we can conclude that while the simulating halt decider at
Ĥ.qx remains in pure simulation mode (thus not aborting the simulation
of its input) Ĥ applied to ⟨Ĥ⟩ never halts.
You need to start by agreeing that ⟨Ĥ⟩ ⟨Ĥ⟩ is a string that encodes aYou have to find the specific error in my rebuttal of this. Making a
halting computation.
blanket assertion that there is an error somewhere does not count as any >>> rebuttal at all.
H gets H_Hat wrong, as Linz says it must do. No surprise there.
The surprise is that the "execution trace" seems to show H_Hat(H_Hat) as
non halting as well.
At least one trace, explicitly of H_Hat(H_Hat), shows it halting. And
when PO pretended that his H might meet the specification I gave for B
(a "function return decider") it showed B_hat(B_hat) returning after a separate top-level call to B(B_hat, B_hat) returned 0.
On Friday, 20 August 2021 at 16:31:33 UTC+1, olcott wrote:is: given the description of a Turing machine M and an input w,
On 8/20/2021 10:10 AM, Ben Bacarisse wrote:H_Hat(H_Hat) halts, whilst H(H_Hat, H_Hat) returns false (non-halting).
You have to go though the following reasoning and point out the specific
You are not going to stay focused on the most serious error you have yet >>> posted?
error. Making a blanket assertion that there is an error somewhere does
not count as any rebuttal at all.
Ĥ.q0 ⟨Ĥ⟩ ⊢* Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ⟩ ⊢* Ĥ.qn
The first (executed) Ĥ has a dependency on these two (simulated) ⟨Ĥ⟩ ⟨Ĥ⟩
that do not have a dependency on the first Ĥ, this makes their position
in the execution trace have an effect on their behavior.
Perhaps this is simply beyond your capacity to understand?
From this we can conclude that while the simulating halt decider at
Ĥ.qx remains in pure simulation mode (thus not aborting the simulation
of its input) Ĥ applied to ⟨Ĥ⟩ never halts.
You need to start by agreeing that ⟨Ĥ⟩ ⟨Ĥ⟩ is a string that encodes aYou have to find the specific error in my rebuttal of this. Making a
halting computation.
blanket assertion that there is an error somewhere does not count as any
rebuttal at all.
H gets H_Hat wrong, as Linz says it must do. No surprise there.
the Turing machine halting problem. Simply stated, the problem
The surprise is that the "execution trace" seems to show H_Hat(H_Hat) as
non halting as well. So did H_Hat(H_Hat) not halt all along, and we are too sinful to see it? Or is there something wrong with the execution trace?
Obviously the only sane conclusion anyone can draw is that there is something wrong with the execution trace. So exactly what? If a function's position in the
execution trace has an effect on its behaviour, this suggests what might be wrong.
But whilst people can and have made sensible, informed guesses as to what is wrong, you're either unwilling or unable to answer some pretty basic questions
about H. So it remains a conjecture.
olcott <NoOne@NoWhere.com> writes:
On 8/20/2021 10:10 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
I am not going to bother to answer all of this so that you can stay
focused on one key point:
You are not going to stay focused on the most serious error you have yet >>> posted?
You have to go though the following reasoning and point out the
specific error.
The specific error is that the string ⟨Ĥ⟩ ⟨Ĥ⟩ encodes the computation of
Ĥ applied to ⟨Ĥ⟩ which, everyone agrees, is a halting computation. Your
statement of Aug 12th that
"⟨Ĥ⟩ ⟨Ĥ⟩ is not a string that encodes a halting computation."
is simply wrong in the simplest factual way. I don't have to look
anywhere else to point out the specific error.
olcott <NoOne@NoWhere.com> writes:
On 8/20/2021 3:32 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
// ⟨Ĥ1⟩ Input to Ĥ
// ⟨Ĥ2⟩ Copy of ⟨Ĥ1⟩ input to
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qy ∞
if ⟨Ĥ1⟩ applied to ⟨Ĥ1⟩ halts, and Ĥ
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
if ⟨Ĥ1⟩ applied to ⟨Ĥ2⟩ does not halt
Pure poetry. What does it mean to apply a string to a string? And all
the ⟨Ĥi⟩ are identical to each other (and to ⟨Ĥ⟩) so I can write this as
Ĥ.q0 ⟨Ĥ2⟩ ⊢* Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ1⟩ ⊢* Ĥ.qn
if ⟨Ĥ2⟩ applied to ⟨Ĥ1⟩ does not halt
and it must mean exactly the same thing. You really have no idea how to >>> use any mathematical notation.
The point is that you are simply ignoring the dependency that the
executed Ĥ has on the status decision of the simulated inputs to Ĥ.qx
⟨Ĥ1⟩ ⟨Ĥ2⟩.
I am pointing out that your notation above is silly and meaningless. Of course you will be wrong about other things as well, but wouldn't it be useful to correct things one step at a time? The six supposedly clear symbolic lines above contain numerous errors.
olcott <NoOne@NoWhere.com> writes:
On 8/21/2021 6:14 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
It is trivially easy for me to understand that the simulation of ⟨Ĥ1⟩ >>>> ⟨Ĥ2⟩ by the simulating halt decider at Ĥ.qx never stops running unless
this SHD aborts its simulation of ⟨Ĥ1⟩ ⟨Ĥ2⟩.
You are reduced to saying things not in dispute as if they change any of >>> the facts you are wrong about.
You never agreed to this before.
Don't be silly. I even gave this problem a name: "PO's Other Halting" problem. You remember the POOH problem? What happens "unless" (rather
than what actually happens) is the same silly ruse you've been pulling
for years.
Now we apply this Theorem:
Simulating Halt Decider Theorem (Olcott 2020):
A simulating halt decider correctly decides that any input that never
halts unless the simulating halt decider aborts its simulation of this
input is an input that never halts.
This is not a theorem but the definition of what "correct" means for the
POOH problem. A problem no one else cares about.
olcott <NoOne@NoWhere.com> writes:
Truism:
Every simulation that would never stop unless Halts() stops
it at some point specifies infinite execution.
Any algorithm that implements this truism is, of course, a halting
decider.
Richard Damon <Richard@Damon-Family.org> writes:
On 8/22/21 12:01 AM, olcott wrote:
On 8/21/2021 8:27 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/21/2021 6:14 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
It is trivially easy for me to understand that the simulation of ⟨Ĥ1⟩
⟨Ĥ2⟩ by the simulating halt decider at Ĥ.qx never stops running unless
this SHD aborts its simulation of ⟨Ĥ1⟩ ⟨Ĥ2⟩.
You are reduced to saying things not in dispute as if they change
any of
the facts you are wrong about.
You never agreed to this before.
Don't be silly. I even gave this problem a name: "PO's Other Halting" >>>> problem. You remember the POOH problem? What happens "unless" (rather >>>> than what actually happens) is the same silly ruse you've been pulling >>>> for years.
Now we apply this Theorem:
Simulating Halt Decider Theorem (Olcott 2020):
A simulating halt decider correctly decides that any input that never >>>>> halts unless the simulating halt decider aborts its simulation of this >>>>> input is an input that never halts.
This is not a theorem but the definition of what "correct" means for the >>>> POOH problem. A problem no one else cares about.
You have already agreed to it:
On 5/11/2021 11:10 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
Truism:
Every simulation that would never stop unless Halts() stops
it at some point specifies infinite execution.
Any algorithm that implements this truism is, of course, a halting
decider.
I think you just got him too confused at some point and he made a
misstatement. You abuse the language enough that this is quite
possible.
Excuse me! I was not at all confused. Something is lost by removing
the context (and the rest if the paragraph that PO cuts helps to make
the meaning clearer) but any algorithm that can decide that a simulation would never stop is a halt decider. The irony is that if he uses that algorithm to turn the simulator into a partial one, the result is not a
halt decider!
I don't really know what PO thinks I meant by these words, but since you
are sane and knowledgeable and you think I made a mistake, my words can obviously be misunderstood. What did you think I was saying?
olcott <NoOne@NoWhere.com> writes:
On 8/22/2021 9:34 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/21/2021 8:27 PM, Ben Bacarisse wrote:Yes, I have agreed that you get to define what the correct answer is for >>> any instance of the POOH problem. The wold continues to spin and no one >>> gives a flying fig about it.
olcott <NoOne@NoWhere.com> writes:
On 8/21/2021 6:14 PM, Ben Bacarisse wrote:Don't be silly. I even gave this problem a name: "PO's Other Halting" >>>>> problem. You remember the POOH problem? What happens "unless" (rather >>>>> than what actually happens) is the same silly ruse you've been pulling >>>>> for years.
olcott <NoOne@NoWhere.com> writes:
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
It is trivially easy for me to understand that the simulation of ⟨Ĥ1⟩
⟨Ĥ2⟩ by the simulating halt decider at Ĥ.qx never stops running unless
this SHD aborts its simulation of ⟨Ĥ1⟩ ⟨Ĥ2⟩.
You are reduced to saying things not in dispute as if they change any of
the facts you are wrong about.
You never agreed to this before.
Now we apply this Theorem:
Simulating Halt Decider Theorem (Olcott 2020):
A simulating halt decider correctly decides that any input that never >>>>>> halts unless the simulating halt decider aborts its simulation of this >>>>>> input is an input that never halts.
This is not a theorem but the definition of what "correct" means for the >>>>> POOH problem. A problem no one else cares about.
You have already agreed to it:
On 5/11/2021 11:10 AM, Ben Bacarisse wrote:I find your endless quoting of this peculiar because you disagree with
olcott <NoOne@NoWhere.com> writes:
Truism:
Every simulation that would never stop unless Halts() stops
it at some point specifies infinite execution.
Any algorithm that implements this truism is, of course, a halting
decider.
it! You adamantly state that you don't have a halt decider (as I and
the world defines is). Are your really saying that you have such an
algorithm? We know you have a partial POOH decider, but that's not what >>> I mean when I talk of a halt decider.
No comment of course on your mistake. It's too serious and too obvious
to do anything but deflect attention from it. Your "⟨Ĥ⟩ ⟨Ĥ⟩ does not
encode a halting computation" can not be justified.
It is justified on the basis that it meets the
Simulating Halt Decider Theorem (Olcott 2020)
non halting criteria that you agreed to.
But not on the basis of what a halt decider is.
a. The string ⟨Ĥ⟩ ⟨Ĥ⟩ encodes the computation of your Ĥ applied to ⟨Ĥ⟩.
b. Your Ĥ applied to ⟨Ĥ⟩ halts.
c. Your H rejects the string ⟨Ĥ⟩ ⟨Ĥ⟩ when it should accept it.
Are you going to try to doubletalk your way out of that one?
It would be a waste of everyone's time but would serve you well as a distraction from a, b and c. What matters (or should matter to you) is
that you are obviously wrong. That remains true even if I were to agree
with everything you have ever said.
On 8/22/2021 11:14 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/22/2021 9:34 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/21/2021 8:27 PM, Ben Bacarisse wrote:Yes, I have agreed that you get to define what the correct answer is
olcott <NoOne@NoWhere.com> writes:
On 8/21/2021 6:14 PM, Ben Bacarisse wrote:Don't be silly. I even gave this problem a name: "PO's Other
olcott <NoOne@NoWhere.com> writes:
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
It is trivially easy for me to understand that the simulation >>>>>>>>> of ⟨Ĥ1⟩
⟨Ĥ2⟩ by the simulating halt decider at Ĥ.qx never stops running >>>>>>>>> unless
this SHD aborts its simulation of ⟨Ĥ1⟩ ⟨Ĥ2⟩.
You are reduced to saying things not in dispute as if they
change any of
the facts you are wrong about.
You never agreed to this before.
Halting"
problem. You remember the POOH problem? What happens "unless"
(rather
than what actually happens) is the same silly ruse you've been
pulling
for years.
Now we apply this Theorem:
Simulating Halt Decider Theorem (Olcott 2020):
A simulating halt decider correctly decides that any input that
never
halts unless the simulating halt decider aborts its simulation of >>>>>>> this
input is an input that never halts.
This is not a theorem but the definition of what "correct" means
for the
POOH problem. A problem no one else cares about.
You have already agreed to it:
for
any instance of the POOH problem. The wold continues to spin and no
one
gives a flying fig about it.
On 5/11/2021 11:10 AM, Ben Bacarisse wrote:I find your endless quoting of this peculiar because you disagree with >>>> it! You adamantly state that you don't have a halt decider (as I and >>>> the world defines is). Are your really saying that you have such an
olcott <NoOne@NoWhere.com> writes:
Truism:
Every simulation that would never stop unless Halts() stops
it at some point specifies infinite execution.
Any algorithm that implements this truism is, of course, a halting >>>>>> decider.
algorithm? We know you have a partial POOH decider, but that's not
what
I mean when I talk of a halt decider.
No comment of course on your mistake. It's too serious and too obvious >>>> to do anything but deflect attention from it. Your "⟨Ĥ⟩ ⟨Ĥ⟩ does not
encode a halting computation" can not be justified.
It is justified on the basis that it meets the
Simulating Halt Decider Theorem (Olcott 2020)
non halting criteria that you agreed to.
But not on the basis of what a halt decider is.
You already agreed that it <is> a halting decider, any reversal on this
can only be construed as deception.
a. The string ⟨Ĥ⟩ ⟨Ĥ⟩ encodes the computation of your Ĥ applied to ⟨Ĥ⟩.
b. Your Ĥ applied to ⟨Ĥ⟩ halts.
c. Your H rejects the string ⟨Ĥ⟩ ⟨Ĥ⟩ when it should accept it.
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
The difference in the behavior of the Ĥ at the beginning of the above template and the behavior of the input to Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ is accounted
for by the fact that these are distinctly different computations that
are not computationally equivalent.
This is much more easily understood by the H(P,P) model where every
detail is explicitly specified and no details are left to the
imagination. The very preliminary very rough draft of this analysis is currently on page 7 of this paper.
https://www.researchgate.net/publication/351947980_Halting_problem_undecidability_and_infinitely_nested_simulation
The basic idea that two distinctly different computations are not
required to have the same behavior is very obviously correct common knowledge.
The analysis of how these intuitively identical computations are
actually distinctly different is the only difficult aspect of this. The verified fact that their correct x86 execution trace is not the same conclusively proves that they are distinctly different computations,
thus can have different behavior without contradiction.
The same function with the same input must derive identical results or
the results are not a pure function of its inputs.
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
In the above computation the computational distinction between Ĥ.qx that transitions to its final state of Ĥ.qn and its input ⟨Ĥ1⟩ ⟨Ĥ2⟩ that
never transitions to any final state is that the execution of Ĥ.qx is
the outer-most instance of what would otherwise be an infinite set of
nested simulations.
It is the only instance of Ĥ.qx that is not under the dominion of
another instance of Ĥ.qx. This makes this outermost instance
computationally distinct from the inner instances.
Are you going to try to doubletalk your way out of that one?
It would be a waste of everyone's time but would serve you well as a
distraction from a, b and c. What matters (or should matter to you) is
that you are obviously wrong. That remains true even if I were to agree
with everything you have ever said.
olcott <NoOne@NoWhere.com> writes:
(anything to avoid addressing the incontrovertible facts)
On 8/22/2021 2:00 PM, Ben Bacarisse wrote:
I take it you agree with a, b and c since you make no comment abouta. The string ⟨Ĥ⟩ ⟨Ĥ⟩ encodes the computation of your Ĥ applied to ⟨Ĥ⟩.
b. Your Ĥ applied to ⟨Ĥ⟩ halts.
c. Your H rejects the string ⟨Ĥ⟩ ⟨Ĥ⟩ when it should accept it. >>>
them. If you do not agree, you need to say which ones you disagree
with.
You have not said which of a, b or c you deny. I don't want to put
words in your mouth (what sort of person would do that, eh?) but I will
have to assume you agree with them all if you don't say.
On Monday, 23 August 2021 at 16:01:23 UTC+1, olcott wrote:
On 8/23/2021 9:43 AM, Malcolm McLean wrote:No one serious is interested in halt deciders for the same reason that no-one serious
So that's the crux of it. If you say that the behaviour of the function (C usage)It might superficially seem that way only because the concept of a
can change based on its execution environment, you are no longer in the world of
so-called "pure" mathematical functions.
simulating halt decider is new and has not been extensively studied.
is interested in perpetual motion machines. If it is known that something cannot be
achieved, you don't waste time on things that might look superficially as if they
are getting there.
So we agree that Infinite_Loop() is a computation, and never halts. H(Infinite_Loop), with whatever twiddles we need for the unused arguments,
void Infinite_Loop()
{
HERE: goto HERE;
}
It is very obvious that the behavior the direct execution of the above
computation must be different than the behavior of the simulation of
this same computation under the dominion of a simulating halt decider.
It is also quite obvious that the simulating halt decider does correctly
decide that Infinite_Loop() never halts.
is also a computation. It halts and returns false.
So that's a good basis to work from.
olcott <NoOne@NoWhere.com> writes:
On 8/23/2021 8:16 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
When a computation is forced to stop running this is an entirelyHow is a TM "forced" to do anything?
different thing than a computation that stops running because it is
has completed all of its steps. If we allow this ambiguity to remain
then disingenuous double talk seems more plausible.
You aready know this,
Nope. I have no idea. TM's halt or they don't and they are never
forced to do anything. You don't really know what it means either or
you would have addressed the question of what it means seriously.
you are merely being tediously nit picky about my choice of words.
As any journal editor or article reviewer would be. Be assured that I
am being very generous is the errors I /don't/ pick up on. Your vague
and undefined words will be absolutely shredded by anyone who has to
read a paper should you ever think you can write one.
On 5/11/2021 11:10 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
Truism:
Every simulation that would never stop unless Halts() stops
it at some point specifies infinite execution.
Any algorithm that implements this truism is, of course, a halting
decider.
You must be an atheist because a Christian knows the penalty for
lying.
You still won't answer my question will you? Avoid, avoid, avoid! You
quote me approvingly -- does that mean you have changed your mind and
you are now claiming to have an algorithm that decides halting (in
general)? You have studiously avoided making that claim so far.
This is, despite the absurdity, a serious question. If I gave you a TM
and an input, how could you tell the difference between it simply
halting ("completing all of its steps") and being "forced to stop
running"? If you can't do that (and I know you can't), you should be
able to show me two TM computations, one which just halts and one which
is forced to stop.
When any x86/TM machine...
We are talking about TMs. You probably don't know what your words games
mean anymore than I do which is why you avoided the question. (Avoid,
avoid, avoid!)
And for anyone else, here's why you are wrong about your H in two
sentences. The string ⟨Ĥ⟩ ⟨Ĥ⟩ encodes the halting computation of Ĥ
applied to ⟨Ĥ⟩. Your H rejects the string ⟨Ĥ⟩ ⟨Ĥ⟩ when it should, in
fact, accept it.
That is a ridiculously foolish thing to say:
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qy ∞
By accepting the ⟨Ĥ1⟩ ⟨Ĥ2⟩ (indicating the input does halt) the input
never halts.
By Jove, I think you've got it!! If I can stomach using your
non-technical terms for once the converse also holds: By rejecting the ⟨Ĥ1⟩ ⟨Ĥ2⟩ (indicating the input does not halt) the input halts.
The string ⟨Ĥ⟩ ⟨Ĥ⟩ encodes the halting computation of Ĥ
applied to ⟨Ĥ⟩. Your H rejects the string ⟨Ĥ⟩ ⟨Ĥ⟩ when it should, in
fact, accept it.
Is very stupidly incorrect.Your H rejects the string ⟨Ĥ⟩ ⟨Ĥ⟩ when it should, in fact, accept it.
The only question is in which way your Ĥ (and thus your H) is wrong, and you've told us enough times: it's wrong because it rejects ⟨Ĥ⟩ ⟨Ĥ⟩. But
⟨Ĥ⟩ ⟨Ĥ⟩ represents a halting computation precisely because H rejects ⟨Ĥ⟩
⟨Ĥ⟩.
But thanks (seriously) for pointing out my own bad wording. You are not wrong because H should accept the string ⟨Ĥ⟩ ⟨Ĥ⟩, you are wrong because
your H rejects it. I'll try to be more careful in future.
olcott <NoOne@NoWhere.com> writes:
On 8/23/2021 6:26 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/23/2021 2:30 PM, Ben Bacarisse wrote:OK, let's do that:
olcott <NoOne@NoWhere.com> writes:
I ignore dishonest dodges away from the point at hand.
"⟨Ĥ⟩ ⟨Ĥ⟩ is not a string that encodes a halting computation" >>> is wrong. You wrote that immediately after a line showing that Ĥ
applied to ⟨Ĥ⟩ halts. Everything since then has just been dodging this
error.
When we define Ĵ to be exactly like Ĥ except that it has a UTM at Ĵ.qx >>>> instead of a simulating halt decider then we can see that Ĵ applied to >>>> ⟨Ĵ⟩ never halts.The details are mess, but basically, yes. Detail errors (that would get >>> your paper rejected out of hand) available if you ask really nicely.
Which details do you think are incorrect?
A UTM is not a decider so the hat construction can't be applied to it.
And if we make a "UTM-decider" (a TM that is a pure simulator except
that is accepts those computations whose simulations terminate) we still can't apply the hat construction because it won't have a rejecting
state. Thus your use of "exactly like Ĥ except..." is, at best, disingenuous. The differences must be greater than the "except..."
clause suggests.
There is an infinite cycle from Ĵ.qx to Ĵ.q0.No, but that's just because you've never written a UTM so you don't know >>> how such a TM would work. Ĵ applied to ⟨Ĵ⟩ is non-halting but there >>> will not be a cycle from Ĵ.q0 -> Ĵ.qx -> Ĵ.q0...[1]
Ĵ.q0 ⟨Ĵ⟩ ⊢* Ĵ.qx ⟨Ĵ⟩ ⟨Ĵ⟩ ⊢* Ĵ.qn
Eh? You've just said that Ĵ applied to ⟨Ĵ⟩ is non-halting. Do you know
what this notation means?
And you have another problem which shows how shallow your thinking is.
What is the state qn supposed to mean when J is a UTM?
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qy ∞
if the simulated ⟨Ĥ1⟩ applied to ⟨Ĥ2⟩ halts, and
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
if the simulated ⟨Ĥ1⟩ applied to ⟨Ĥ2⟩ does not halt
Is it really that difficult to understand that I merely swapped Ĵ for
Ĥ in the Ĥ template to create the Ĵ tempate?
I understand that you think you can just say that, but I also understand
the "template" better than you appear to.
Presumably you
agree with my wording and, in fact, J is a UTM that can only halt when
simulating halting computations. So what's qn doing there? (J must
have a qn for Ĵ to have qn.)
Ĵ.q0 ⟨Ĵ⟩ ⊢* Ĵ.qx ⟨Ĵ⟩ ⟨Ĵ⟩ ⊢* Ĵ.qn
Do you know this means that you are claiming that Ĵ applied to ⟨Ĵ⟩ halts?
You just claimed the opposite. I think you are just typing
symbols because they look good.
Ĵ0.q0 copies its input ⟨Ĵ1⟩ to ⟨Ĵ2⟩ then Ĵ0.qx simulates Ĵ1 with the ⟨Ĵ2⟩ copy then
Ĵ1.q0 copies its input ⟨Ĵ2⟩ to ⟨Ĵ3⟩ then Ĵ1.qx simulates Ĵ2 with the ⟨Ĵ3⟩ copy then
Ĵ2.q0 copies its input ⟨Ĵ3⟩ to ⟨Ĵ4⟩ then Ĵ2.qx simulates Ĵ3 with the
⟨Ĵ4⟩ copy then ...
No. Totally wrong. Your understanding of how a UTM works is
embarrassingly shallow and I simply don't have time to explain it to
you. In addition, you appear resistant to learning, so it would also be pointless. I can only suggest you change you attitude to learning and
then read a book, Linz for example.
H.q0 ⟨Ĵ⟩ ⟨Ĵ⟩ ⊢* Ĥ.qnTypo: H.qn not Ĥ.qn.
Yes, typo.
When we apply the original H to ⟨Ĵ⟩ ⟨Ĵ⟩ it transitions to its finalIf you say so. I can't know because you are hiding H
state of H.qn
It is the Linz H.
Since, against my repeated advice, you chose to use the same symbol for
your actual TM as Linz does for his empty class of TMs you need to be
more careful distinguishing them.
"The original H" is not clear and
discussion of it should be phrased hypothetically. You should talk
about what Linz's H is specified to do, not what it does.
But since you brought up Linz's H, here's a question (get your avoidance waffle ready!). What is Linz's H specified to do when applied to your ⟨Ĥ⟩ ⟨Ĥ⟩? For clarity, let Linz's H be called L just for now. What goes
after the ⊢* here:
L.q0 ⟨Ĥ⟩ ⟨Ĥ⟩ ⊢* ?
I really expect an answer to this. If you can't answer, be honest and
say you can't.
(well, you don't
actually have a TM H we are just playing pretend here). For all I know, >>> your H gets this case wrong as well, but I am prepared to accept what
you say about it.
It is the Linz H: Nitwit !!!
You should give some thought to being more respectful.
Can you understand that the direct execution of Ĵ on input ⟨Ĵ⟩ is not
computationally equivalent to simulating halt decider H applied to ⟨Ĵ⟩
⟨Ĵ⟩ ?
I am not going to answer trivial, patronising questions.
It it a mandatory prerequisite to the next step of my proof that you
are persistently (intentionally ?) failing to understand.
Don't be daft. You can present your argument whether or not I answer
your patronising questions. If you choose not to, that suits me better because there will be fewer errors to point out if you keep it to
yourself.
If you understand that the direct execution of Ĵ on input ⟨Ĵ⟩ is not >> computationally equivalent to simulating halt decider H applied to ⟨Ĵ⟩ ⟨Ĵ⟩
then you should be able to understand that
the direct execution of Ĥ on input ⟨Ĥ⟩ is not computationally
equivalent to simulating halt decider at Ĥ.qx applied to ⟨Ĥ⟩ ⟨Ĥ⟩.
That is beyond absurd. I leave it to you spot the silly error in your reasoning (though you almost certainly won't be able to). And you will
need to account for the fact that both
Ĥ.q0 ⟨Ĥ⟩ ⊢* Ĥ.qn (via Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ⟩)
and
Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ⟩ ⊢* Ĥ.qn
and how that can be true of computations that are not "computationally equivalent". (You don't give the final state of the tape but it will be
the same in both cases.) Let me be clear: the reasoning is silly (how
you go from one assertion to the next) and the conclusion is wrong.
This is not "failing to understand" it is "knowing more about the
subject than you do".
Your understanding of TM computations is woefully inadequate to discuss
these matters. Almost everything you say contains errors, many of them
huge errors that render your arguments null and void. Even so, nothing
you say addresses the reason why your H is not a halt decider. Your H
(not Linz's H) rejects a string that encodes a halting computation.
It's as simple as that.
olcott <NoOne@NoWhere.com> writes:
On 8/23/2021 10:09 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/23/2021 6:26 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/23/2021 2:30 PM, Ben Bacarisse wrote:OK, let's do that:
olcott <NoOne@NoWhere.com> writes:
I ignore dishonest dodges away from the point at hand.
"⟨Ĥ⟩ ⟨Ĥ⟩ is not a string that encodes a halting computation"
is wrong. You wrote that immediately after a line showing that Ĥ
applied to ⟨Ĥ⟩ halts. Everything since then has just been dodging this
error.
When we define Ĵ to be exactly like Ĥ except that it has a UTM at Ĵ.qxThe details are mess, but basically, yes. Detail errors (that would get >>>>> your paper rejected out of hand) available if you ask really nicely.
instead of a simulating halt decider then we can see that Ĵ applied to >>>>>> ⟨Ĵ⟩ never halts.
Which details do you think are incorrect?
A UTM is not a decider so the hat construction can't be applied to it.
And if we make a "UTM-decider" (a TM that is a pure simulator except
that is accepts those computations whose simulations terminate) we still >>> can't apply the hat construction because it won't have a rejecting
state. Thus your use of "exactly like Ĥ except..." is, at best,
disingenuous. The differences must be greater than the "except..."
clause suggests.
My whole purpose was to simply show what happens when the simulating
halt decide at Ĥ.qx only simulates its input.
I know, but you wanted to know what details you'd got wrong.
We can still have the same final states, except now that are
unreachable dead code.
Except you show below this unreachable state being reached:
Ĵ.q0 ⟨Ĵ⟩ ⊢* Ĵ.qx ⟨Ĵ⟩ ⟨Ĵ⟩ ⊢* Ĵ.qn
The TM at Ĵ.qx is your "UTM-decider" with an unreachable reject state.
Do you see why I don't think you know what you are saying?
There is an infinite cycle from Ĵ.qx to Ĵ.q0.No, but that's just because you've never written a UTM so you don't know >>>>> how such a TM would work. Ĵ applied to ⟨Ĵ⟩ is non-halting but there
will not be a cycle from Ĵ.q0 -> Ĵ.qx -> Ĵ.q0...[1]
Ĵ.q0 ⟨Ĵ⟩ ⊢* Ĵ.qx ⟨Ĵ⟩ ⟨Ĵ⟩ ⊢* Ĵ.qn
Eh? You've just said that Ĵ applied to ⟨Ĵ⟩ is non-halting.
This needs to be addressed.
I understand that you think you can just say that, but I also understand >>> the "template" better than you appear to.And you have another problem which shows how shallow your thinking is. >>>>> What is the state qn supposed to mean when J is a UTM?
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qy ∞
if the simulated ⟨Ĥ1⟩ applied to ⟨Ĥ2⟩ halts, and
Ĥ.q0 ⟨Ĥ1⟩ ⊢* Ĥ.qx ⟨Ĥ1⟩ ⟨Ĥ2⟩ ⊢* Ĥ.qn
if the simulated ⟨Ĥ1⟩ applied to ⟨Ĥ2⟩ does not halt
Is it really that difficult to understand that I merely swapped Ĵ for >>>> Ĥ in the Ĥ template to create the Ĵ tempate?
Presumably you
agree with my wording and, in fact, J is a UTM that can only halt when >>>>> simulating halting computations. So what's qn doing there? (J must >>>>> have a qn for Ĵ to have qn.)
Ĵ.q0 ⟨Ĵ⟩ ⊢* Ĵ.qx ⟨Ĵ⟩ ⟨Ĵ⟩ ⊢* Ĵ.qn
Do you know this means that you are claiming that Ĵ applied to ⟨Ĵ⟩ >>> halts?
I am not claiming that.
So why did you write Ĵ.q0 ⟨Ĵ⟩ ⊢* Ĵ.qx ⟨Ĵ⟩ ⟨Ĵ⟩ ⊢* Ĵ.qn?
You wrote a
formal description of something that is impossible (qn is unreachable if
it exists at all) and which even if it were possible is not what Ĵ
applied to ⟨Ĵ⟩ does? No, you wrote something daft without thinking or maybe without know what it meant.
I am making a single change to Ĥ that now has some unreachable dead
code states.
Which state? Ĵ.qn? The one you show Ĵ.q0 ⟨Ĵ⟩ transitioning to? Yeah,
sure.
Ĵ0.q0 copies its input ⟨Ĵ1⟩ to ⟨Ĵ2⟩ then Ĵ0.qx simulates Ĵ1 with the ⟨Ĵ2⟩ copy thenNo. Totally wrong. Your understanding of how a UTM works is
Ĵ1.q0 copies its input ⟨Ĵ2⟩ to ⟨Ĵ3⟩ then Ĵ1.qx simulates Ĵ2 with the ⟨Ĵ3⟩ copy then
Ĵ2.q0 copies its input ⟨Ĵ3⟩ to ⟨Ĵ4⟩ then Ĵ2.qx simulates Ĵ3 with the
⟨Ĵ4⟩ copy then ...
embarrassingly shallow and I simply don't have time to explain it to
you. In addition, you appear resistant to learning, so it would also be >>> pointless. I can only suggest you change you attitude to learning and
then read a book, Linz for example.
If the Ĥ template stipulates that those actions occur then they occur
when Ĥ has the one single modification of changing the simulating halt
decider at Ĥ.qx to a UTM.
No. Give this up. You don't understand what a UTM is, and I can't
possibly teach you. You have the result you want: the "other TM
computation" is non-halting but it does not do that in the way you
think, but if you keep giving details, I'll have to keep replying that
you are wrong.
...H.q0 ⟨Ĵ⟩ ⟨Ĵ⟩ ⊢* Ĥ.qnTypo: H.qn not Ĥ.qn.
Yes, typo.
It is the Linz H.
Since, against my repeated advice, you chose to use the same symbol for
your actual TM as Linz does for his empty class of TMs you need to be
more careful distinguishing them.
Apparently most all of the textbooks call this H.
Which is further evidence that you should not. These books use H to
refer to a hypothetical member of an empty class of TMs. Your H is
real. It does stuff. It is not a member of an empty set. And gets at
least one instance of the halting problem wrong because your H rejects
the string ⟨Ĥ⟩ ⟨Ĥ⟩.
But since you brought up Linz's H, here's a question (get your avoidance >>> waffle ready!). What is Linz's H specified to do when applied to your
⟨Ĥ⟩ ⟨Ĥ⟩? For clarity, let Linz's H be called L just for now. What goes
after the ⊢* here:
I am breaking that analysis down to its simpler components.
So you are not going to answer. OK, it was a lot to expect -- a direct answer to a simple question.
We take the Linz Ĥ and change the simulating halt decider at Ĥ.qx to a
UTM and rename this new machine Ĵ. The new machine has come dead code
staes that are never reached.
That won't help you say what Linz's H specified to do when applied to
/your/ ⟨Ĥ⟩ ⟨Ĥ⟩. Note: to your ⟨Ĥ⟩ ⟨Ĥ⟩.
Now we apply the Linz H to ⟨Ĵ⟩ ⟨Ĵ⟩ and H transitions to its final >> state of H.qn indicating that Ĵ applied to ⟨Ĵ⟩ never halts.
Which is not what I was asking about.
L.q0 ⟨Ĥ⟩ ⟨Ĥ⟩ ⊢* ?
I really expect an answer to this. If you can't answer, be honest and
say you can't.
Maybe it is easier now.
For who? I already know the answer. I am asking you because you can't
(or dare not) say.
If you understand that the direct execution of Ĵ on input ⟨Ĵ⟩ is not >>>> computationally equivalent to simulating halt decider H applied to ⟨Ĵ⟩ ⟨Ĵ⟩That is beyond absurd. I leave it to you spot the silly error in your
then you should be able to understand that
the direct execution of Ĥ on input ⟨Ĥ⟩ is not computationally
equivalent to simulating halt decider at Ĥ.qx applied to ⟨Ĥ⟩ ⟨Ĥ⟩.
reasoning (though you almost certainly won't be able to).
My only "error" is that you very persistently and thus disrespectfully
fail to bother to pay attention to my proof that this is correct.
I have never seen anything remotely resembling a proof from you. And
you reasoning above is absurd. It's absurd and it results in an
incorrect conclusion.
olcott <NoOne@NoWhere.com> writes:
Truism:
Every simulation that would never stop unless Halts() stops
it at some point specifies infinite execution.
Any algorithm that implements this truism is, of course, a halting
decider.
<aside>
Part of the problem is that you don't know what a proof is. I mean that
literally. Your ancient error about entailment suggests that you think
you can just add "stipulations" that make theorems into non-theorems.
It means you think you don't need to address the original argument
because you think you can invalidate it with other "true" things. You
may not know it, but this makes your "arguments" laughable in the eyes
of educated readers. Some will find not paying attention to them the
most respectful thing they can do.
</aside>
Not only have you no proof, there is a trivial and concrete argument
that you are wrong: ⟨Ĥ⟩ ⟨Ĥ⟩ encodes the halting computation of Ĥ applied
to ⟨Ĥ⟩. H incorrectly reject that string.
I've cut the waffle about C code. The theorem, and the error we are currently discussing are about the behaviour or TMs.
And I've moved some quoted material to help with the context:
And you will need to account for the fact that both
Ĥ.q0 ⟨Ĥ⟩ ⊢* Ĥ.qn (via Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ⟩)
and
Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ⟩ ⊢* Ĥ.qn
and how that can be true of computations that are not "computationally
equivalent". (You don't give the final state of the tape but it will be >>> the same in both cases.)
See? Every important question you just duck. Your claim that
"execution of Ĥ on input ⟨Ĥ⟩ is not computationally equivalent to
simulating halt decider at Ĥ.qx applied to ⟨Ĥ⟩ ⟨Ĥ⟩"
is simply wrong based on facts you keep posting. I suspect you just
don't know what any of this means and you are totally out of your
depth. Mind you, you flop about on this issue. Elsewhere you only
claim that the computations are distinct. Of course they are distinct.
But here you talk about computational equivalence without, I suspect,
knowing what that means for TMs.
Your understanding of TM computations is woefully inadequate to discuss
these matters. Almost everything you say contains errors, many of them
huge errors that render your arguments null and void. Even so, nothing
you say addresses the reason why your H is not a halt decider. Your H
(not Linz's H) rejects a string that encodes a halting computation.
It's as simple as that.
TM's always leave most of their behavior to the imagination.
No, you've just never written one or even understood one that someone
else wrote.
The C code that I referenced is fully operational and shows every
step.
And that's a lie. You very carefully don't show the code or the
critical steps. They are all hidden.
It's unfortunate for you that we
can still work out that your code is wrong despite your efforts to hide
it and to obscure its behaviour.
I gave you an opportunity to write C code that is incontrovertibly "interesting" in that the specification is for a different undecidable problem, but your response was to post output showing that your (again hidden) code did not meet the specification. Then you declared that my "opinion" of what I wanted the code to do was wrong! It's hard to see
how you expect these postings to be treated with respect. I, for one,
am constantly biting my tongue.
olcott <NoOne@NoWhere.com> writes:
On 8/27/2021 7:01 PM, Ben Bacarisse wrote:
André G. Isaak <agisaak@gm.invalid> writes:
On 2021-08-27 10:18, olcott wrote:Indeed. I see in my absence there's been a flurry of "Ben is wrong"
On 8/27/2021 10:57 AM, André G. Isaak wrote:
Ben never made any claims that it didn't perform some operation
which could be construed as the functional equivalent of copying a >>>>>> string. He claimed that there was no *literal* copying involved
except in the first instance.
posts from PO. Thanks, to you and RD, for stepping in.
At the time I was actually calling out hard errors of fact, not justSo in other words he said that my high level abstraction was wrong on >>>>> the basis that it was a high level abstraction and did not delve into >>>>> the tedious details of how this high level abstraction is
implemented.
No, he was claiming that your high level abstraction was *misleading*
and belied a lack of understanding of UTMs on your part.
misleading abstractions. I was (dangerously) prepared to go along with
the abstract view, as I (and others) have done for some time, because,
whilst I agree it is potentially misleading, it's not actually wrong.
But PO did not think he was talking about abstractions at the time I
called him out on the mistake. He really did think that if you do the
"hat" construction on a TM that is little more that a UTM, then it --
the actual TM we'd call UTM^ -- has a cycle in its state graph allowing
it to go from what he calls qx (the UTM's q0) back (via other states of
course) to UTM^'s q0. And he thought that this loop is what wrote the
endless literal copies. He used Linz's notation for TM configurations
to show the strings right there on the tape next to each other, mid
computation, with q0 being entered again and again.
It does have literal endless copies and no one besides you has claimed
otherwise.
(1) Of something, yes, but of what? Not of what you claimed.
(2) Are you backing down from your claim about the loop in the state
transition graph?
(3) You have it backwards. I only see posters agreeing with me on this
topic.
Even if he now tries to suggest that he was using the notation in some
sort of abstract way, the explicit cycle in the states gives a lie to
that. He thought it was actual, literal, symbol by symbol copying every >>> time, exactly as the extra states added by the hat construction do it.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 365 |
Nodes: | 16 (2 / 14) |
Uptime: | 87:48:09 |
Calls: | 7,778 |
Files: | 12,911 |
Messages: | 5,750,184 |