• How do we know H(P,P)==0 is the correct halt status for the input to H?

    From olcott@21:1/5 to All on Sat Aug 14 10:17:55 2021
    XPost: comp.theory, comp.software-eng, sci.math.symbolic

    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.

    --
    Copyright 2021 Pete Olcott

    "Great spirits have always encountered violent opposition from mediocre
    minds." Einstein

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From olcott@21:1/5 to All on Thu Aug 19 21:53:43 2021
    XPost: comp.theory, comp.software-eng, sci.math.symbolic

    To prove that H(P,P)==0 is correct we create an exact
    copy of H and change P to Call this exact copy: H1.

    H can see that H1 aborts the simulation of its input
    and returns 1 indicating that its input halts.

    When H had to rely on itself to abort the simulation
    of P(P) is correctly reports that its input never halts.

    void P(u32 x)
    {
    if (H1(x, x))
    HERE: goto HERE;
    }


    int main()
    {
    Output("Input_Halts = ", H((u32)P, (u32)P));
    }

    _P()
    [00000e52](01) 55 push ebp
    [00000e53](02) 8bec mov ebp,esp
    [00000e55](03) 8b4508 mov eax,[ebp+08]
    [00000e58](01) 50 push eax
    [00000e59](03) 8b4d08 mov ecx,[ebp+08]
    [00000e5c](01) 51 push ecx
    [00000e5d](05) e8b0fcffff call 00000b12 // call H1
    [00000e62](03) 83c408 add esp,+08
    [00000e65](02) 85c0 test eax,eax
    [00000e67](02) 7402 jz 00000e6b
    [00000e69](02) ebfe jmp 00000e69
    [00000e6b](01) 5d pop ebp
    [00000e6c](01) c3 ret
    Size in bytes:(0027) [00000e6c]

    _main()
    [00000e72](01) 55 push ebp
    [00000e73](02) 8bec mov ebp,esp
    [00000e75](05) 68520e0000 push 00000e52
    [00000e7a](05) 68520e0000 push 00000e52
    [00000e7f](05) e84efeffff call 00000cd2 // call H
    [00000e84](03) 83c408 add esp,+08
    [00000e87](01) 50 push eax
    [00000e88](05) 6823030000 push 00000323
    [00000e8d](05) e8c0f4ffff call 00000352
    [00000e92](03) 83c408 add esp,+08
    [00000e95](02) 33c0 xor eax,eax
    [00000e97](01) 5d pop ebp
    [00000e98](01) c3 ret
    Size in bytes:(0039) [00000e98]

    machine stack stack machine assembly
    address address data code language
    ======== ======== ======== ========= ============= ...[00000e72][00101a94][00000000] 55 push ebp ...[00000e73][00101a94][00000000] 8bec mov ebp,esp ...[00000e75][00101a90][00000e52] 68520e0000 push 00000e52 ...[00000e7a][00101a8c][00000e52] 68520e0000 push 00000e52 ...[00000e7f][00101a88][00000e84] e84efeffff call 00000cd2 // call H

    Begin Local Halt Decider Simulation at Machine Address:e52 ...[00000e52][00211b34][00211b38] 55 push ebp ...[00000e53][00211b34][00211b38] 8bec mov ebp,esp ...[00000e55][00211b34][00211b38] 8b4508 mov eax,[ebp+08] ...[00000e58][00211b30][00000e52] 50 push eax ...[00000e59][00211b30][00000e52] 8b4d08 mov ecx,[ebp+08] ...[00000e5c][00211b2c][00000e52] 51 push ecx ...[00000e5d][00211b28][00000e62] e8b0fcffff call 00000b12 // call H1

    Begin Local Halt Decider Simulation at Machine Address:e52 ...[00000e52][0025c55c][0025c560] 55 push ebp ...[00000e53][0025c55c][0025c560] 8bec mov ebp,esp ...[00000e55][0025c55c][0025c560] 8b4508 mov eax,[ebp+08] ...[00000e58][0025c558][00000e52] 50 push eax ...[00000e59][0025c558][00000e52] 8b4d08 mov ecx,[ebp+08] ...[00000e5c][0025c554][00000e52] 51 push ecx ...[00000e5d][0025c550][00000e62] e8b0fcffff call 00000b12 // call H1 ...[00000e52][002a6f84][002a6f88] 55 push ebp ...[00000e53][002a6f84][002a6f88] 8bec mov ebp,esp ...[00000e55][002a6f84][002a6f88] 8b4508 mov eax,[ebp+08] ...[00000e58][002a6f80][00000e52] 50 push eax ...[00000e59][002a6f80][00000e52] 8b4d08 mov ecx,[ebp+08] ...[00000e5c][002a6f7c][00000e52] 51 push ecx ...[00000e5d][002a6f78][00000e62] e8b0fcffff call 00000b12 // call H1
    Local Halt Decider: Infinite Recursion Detected Simulation Stopped

    ...[00000e62][00211b34][00211b38] 83c408 add esp,+08 ...[00000e65][00211b34][00211b38] 85c0 test eax,eax ...[00000e67][00211b34][00211b38] 7402 jz 00000e6b ...[00000e6b][00211b38][00000d8f] 5d pop ebp ...[00000e6c][00211b3c][00000e52] c3 ret ...[00000e84][00101a94][00000000] 83c408 add esp,+08 ...[00000e87][00101a90][00000001] 50 push eax ...[00000e88][00101a8c][00000323] 6823030000 push 00000323 ---[00000e8d][00101a8c][00000323] e8c0f4ffff call 00000352
    Input_Halts = 1
    ...[00000e92][00101a94][00000000] 83c408 add esp,+08 ...[00000e95][00101a94][00000000] 33c0 xor eax,eax ...[00000e97][00101a98][00100000] 5d pop ebp ...[00000e98][00101a9c][00000004] c3 ret Number_of_User_Instructions(1)
    Number of Instructions Executed(617658)



    --
    Copyright 2021 Pete Olcott

    "Great spirits have always encountered violent opposition from mediocre
    minds." Einstein

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)