• Re: DD correctly simulated by HHH proves that it never stops running

    From Richard Heathfield@21:1/5 to olcott on Mon Aug 25 16:18:15 2025
    On 25/08/2025 16:13, olcott wrote:
    On 8/25/2025 1:11 AM, Richard Heathfield wrote:

    <snip>

    Here's my proof that DD halts.

    <proof snipped; if you want to see it and can't find it, whistle>


    HHH(DD) yields 0 (incorrect claim of non-halting).
    DD yields 0 (incorrect claim of non-halting).



    When the abort code is removed by a compile
    time switch

    ...you change the things you're measuring.

    <snip>

    Therefore HHH(DD)==0 is proven to be correct.

    Great! But when HHH(DD) returns 0, DD halts.

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Mon Aug 25 16:34:16 2025
    On 25/08/2025 16:25, olcott wrote:
    hen I remove the abort code that does not change
    the sequence of instructions of DD correctly simulated
    by HHH thus this change is of no consequence.

    It changes the answer! How much consequence were you after?

    When DD is "correctly simulated" as you put it, HHH yields 0. You
    insist on the point.

    When HHH yields 0, DD halts. The C language insists on the point.


    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From joes@21:1/5 to All on Mon Aug 25 15:34:31 2025
    Am Mon, 25 Aug 2025 10:25:59 -0500 schrieb olcott:
    On 8/25/2025 10:17 AM, dbush wrote:
    On 8/25/2025 11:13 AM, olcott wrote:
    On 8/25/2025 1:11 AM, Richard Heathfield wrote:
    On 25/08/2025 05:59, olcott wrote:
    On 8/23/2025 11:44 PM, Richard Heathfield wrote:
    On 23/08/2025 21:40, olcott wrote:

    When we eliminate the static data then the fact that DD() never
    halts proves that HHH(DD)==0.
    ...and DD promptly halts. Odd, that.
    No it actually never halts.

    This is where you like to say "tisn't", except that you spell it
    "counter-factual".
    But when /I/ say "tisn't", I back it up with verifiable acts.
    Here's my proof that DD halts.

    When the abort code is removed by a compile time

    You change the input.
    Changing the input is not allowed.

    When I remove the abort code that does not change the sequence of instructions of DD correctly simulated by HHH thus this change is of no consequence.
    If I were to append NOP instructions at the end of DD and run the
    analysis again this too would change the input yet in a way that cannot possibly have any effect on the behavior of DD, thus cannot possibly
    have any effect on the analysis of the behavior of DD.
    How curious, since the abort code is assuredly not a NOP. Apparently
    the input code does not correspond 1-1 to programs. You should pass
    an additional parameter to disambiguate.

    --
    Am Sat, 20 Jul 2024 12:35:31 +0000 schrieb WM in sci.math:
    It is not guaranteed that n+1 exists for every n.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Mon Aug 25 16:36:51 2025
    On 25/08/2025 16:27, olcott wrote:
    On 8/25/2025 10:18 AM, Richard Heathfield wrote:
    On 25/08/2025 16:13, olcott wrote:

    <snip>


    Therefore HHH(DD)==0 is proven to be correct.

    Great! But when HHH(DD) returns 0, DD halts.


    When we disable the abort code then HHH never returns
    proving that HHH(DD)==0 is correct.

    Great! But when HHH(DD) returns 0, DD halts, in accordance with
    the rules of C.


    You have therefore PROVED that HHH(DD) correctly returns the
    wrong answer. Nice one.


    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From joes@21:1/5 to All on Mon Aug 25 15:47:45 2025
    Am Mon, 25 Aug 2025 10:44:50 -0500 schrieb olcott:
    On 8/25/2025 10:34 AM, joes wrote:
    Am Mon, 25 Aug 2025 10:25:59 -0500 schrieb olcott:
    On 8/25/2025 10:17 AM, dbush wrote:
    On 8/25/2025 11:13 AM, olcott wrote:
    On 8/25/2025 1:11 AM, Richard Heathfield wrote:
    On 25/08/2025 05:59, olcott wrote:
    On 8/23/2025 11:44 PM, Richard Heathfield wrote:
    On 23/08/2025 21:40, olcott wrote:

    When the abort code is removed by a compile time

    You change the input.
    Changing the input is not allowed.

    When I remove the abort code that does not change the sequence of
    instructions of DD correctly simulated by HHH thus this change is of
    no consequence.
    If I were to append NOP instructions at the end of DD and run the
    analysis again this too would change the input yet in a way that
    cannot possibly have any effect on the behavior of DD, thus cannot
    possibly have any effect on the analysis of the behavior of DD.
    How curious, since the abort code is assuredly not a NOP. Apparently
    the input code does not correspond 1-1 to programs. You should pass an
    additional parameter to disambiguate.

    Changing the input in any way that does not change the sequence of instructions of DD correctly simulated by HHH has no consequence on the halting behavior of DD correctly simulated by HHH.
    I want my simulators not to turn abort code into a NOP.

    --
    Am Sat, 20 Jul 2024 12:35:31 +0000 schrieb WM in sci.math:
    It is not guaranteed that n+1 exists for every n.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Mon Aug 25 16:59:15 2025
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42); /* may halt */

    void foo(void)
    {
    foo(); /* halts when it smashes its stack */
    }

    kill(getpid(), SIGKILL); /* halts */

    None of these (except maybe the long goto) reach a return
    statement, and none of them are simulated, but they all halt.

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Mon Aug 25 17:25:16 2025
    On 25/08/2025 17:14, olcott wrote:
    On 8/25/2025 10:59 AM, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing.


    Counter-factual

    computation that halts… “the Turing machine will halt
    whenever it enters a final state” (Linz:1990:234)

    Evidence! Good on yer.

    But... Counter-factual, as you say.

    1) DD is not a Turing machine. It's a C function.
    2) Your quote doesn't define the term; it merely uses it.

    Linz had no need to define "halt" because it's bloody obvious
    what it means, but he sure as hell didn't define it as a
    simulator state.

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?B?QW5kcsOpIEcuIElzYWFr?=@21:1/5 to Richard Heathfield on Mon Aug 25 14:57:53 2025
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
      foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott. A recursive function that
    crashes due to a stack overflow doesn't halt in any meaningful sense of
    the word.

    André

    --
    To email remove 'invalid' & replace 'gm' with well known Google mail
    service.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to All on Tue Aug 26 00:27:29 2025
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function
    that crashes due to a stack overflow doesn't halt in any
    meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's more ways
    to stop a C function than to wait until it is "reaching a
    simulated "return" statement final halt state in a finite number
    of steps".

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?B?QW5kcsOpIEcuIElzYWFr?=@21:1/5 to Richard Heathfield on Mon Aug 25 17:48:53 2025
    On 2025-08-25 17:27, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow doesn't halt
    in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    No, but the halting problem really distinguishes between those
    computations which reach completion in a finite number of steps and
    those which continue indefinitely. Remember that the problem was
    originally framed in terms of TMs, and TMs don't run inside an operating
    system which can pull the rug out from under them in response to an
    exception.

    A unconditionally recursive function will ultimately stop running on
    real hardware because the operating system will detect an exception, but
    it doesn't run to completion. Given a system with unbounded resources,
    it would continue forever.

    André

    But I hope you take the more general point that there's more ways to
    stop a C function than to wait until it is "reaching a simulated
    "return" statement final halt state in a finite number of steps".


    --
    To email remove 'invalid' & replace 'gm' with well known Google mail
    service.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Mon Aug 25 20:06:23 2025
    On 8/25/25 8:01 PM, olcott wrote:
    On 8/25/2025 6:48 PM, André G. Isaak wrote:
    On 2025-08-25 17:27, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow doesn't
    halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    No, but the halting problem really distinguishes between those
    computations which reach completion in a finite number of steps and
    those which continue indefinitely. Remember that the problem was
    originally framed in terms of TMs, and TMs don't run inside an
    operating system which can pull the rug out from under them in
    response to an exception.

    A unconditionally recursive function will ultimately stop running on
    real hardware because the operating system will detect an exception,
    but it doesn't run to completion. Given a system with unbounded
    resources, it would continue forever.

    André


    Exactly !!!
    So we must measure halting behavior on the basis of
    reaching a final halt state or impossibly reaching a
    final halt state like: *DD correctly simulated by HHH*

    Which only applies *IF* HHH does in fact do a correct simulation, and
    thus if it aborts, it can be the criteria.

    Thus, by your criteria, HHH can never answer non-halting, as it doesn't
    have its own correct simulation to determine that.

    It doesn't matter if some other thing you try to call HHH correctly
    simulates another thing you try to call DD, they are NOT this HHH and
    this DD.

    Sorry, your criteria is just self-contradictory.


    But I hope you take the more general point that there's more ways to
    stop a C function than to wait until it is "reaching a simulated
    "return" statement final halt state in a finite number of steps".





    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Tue Aug 26 01:55:11 2025
    On 26/08/2025 01:31, olcott wrote:
    On 8/25/2025 6:27 PM, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer
    executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow
    doesn't halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's more
    ways to stop a C function than to wait until it is "reaching a
    simulated "return" statement final halt state in a finite
    number of steps".


    Yet we are using C functions only to model the
    behavior of Turing machines. The only way for
    a Turing machine to halt is to reach a final
    halt state.

    Fair point, but then a DD Turing machine can't halt while HHH is
    running a simulation of it, because while HHH is running a
    simulation of it it's on hold waiting for HHH to report, and you
    can't reach a final halt state while you're waiting for a result
    from a subroutine. So it all comes down to what HHH reports, and
    we all know how that ends.

    I invite you (and I suspect you won't bother, but one can but
    try) to consider the distinction between the question "does DD
    halt?" and the question "does my simulation tell me DD would halt
    if I ran it in simulation?"

    Those two questions are not the same, and they appear to have
    very different answers.

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Mon Aug 25 21:00:43 2025
    On 8/25/25 8:31 PM, olcott wrote:
    On 8/25/2025 6:27 PM, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow doesn't
    halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's more ways to
    stop a C function than to wait until it is "reaching a simulated
    "return" statement final halt state in a finite number of steps".


    Yet we are using C functions only to model the
    behavior of Turing machines. The only way for
    a Turing machine to halt is to reach a final
    halt state.


    And your HHH and DD the way you look at them can't be Turing Machines.

    Turing Machine representations being simulated by a UTM can't access a representation of the "UTM" HHH that is simulating them, and thus DD
    needs its own copy of HHH as part of it, and in its representation.
    (Thus hypotosysing changing HHH to a correct UTM, doesn't change the
    tape or that changes the input)

    That copy of HHH (the one in DD), can't write data into the tape of the
    "UTM" HHH what it is doing, so HHH needs to be able to actually detect
    that the input has a copy of itself, when HHH doesn't have a
    representation of itself, and nothing says those representations will be
    an exact match, in fact they are unlikely to be a match as if State 0 is
    given something special to mark it as the start, then the beginning of
    the copy of HHH in DD won't have that special mark, as it isn't the
    start of the machine on the tape.

    Thus, you are just admitting to having a flawed model, as you can't do
    what you claim you are doing.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Tue Aug 26 02:35:45 2025
    On 26/08/2025 02:20, olcott wrote:
    On 8/25/2025 7:55 PM, Richard Heathfield wrote:
    On 26/08/2025 01:31, olcott wrote:
    On 8/25/2025 6:27 PM, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer
    executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow
    doesn't halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's more
    ways to stop a C function than to wait until it is "reaching
    a simulated "return" statement final halt state in a finite
    number of steps".


    Yet we are using C functions only to model the
    behavior of Turing machines. The only way for
    a Turing machine to halt is to reach a final
    halt state.

    Fair point, but then a DD Turing machine can't halt while HHH
    is running a simulation of it, because while HHH is running a
    simulation of it it's on hold waiting for HHH to report, and
    you can't reach a final halt state while you're waiting for a
    result from a subroutine. So it all comes down to what HHH
    reports, and we all know how that ends.


    No you have that incorrectly.
    DD correctly simulated by HHH keeps DD and the
    simulated HHH stuck in recursive emulation until
    the executed HHH kills simultaneously kills all
    simulations. A dead HHH does not report to a dead DD.

    No you have that incorrectly. I'm not talking about the behaviour
    of DD correctly simulated by HHH. I'm talking about DD's
    behaviour when it's running, i.e, when it's *not* being simulated.

    I invite you (and I suspect you won't bother, but one can but
    try) to consider the distinction between the question "does DD
    halt?" and the question "does my simulation tell me DD would
    halt if I ran it in simulation?"


    That is the wrong questions.

    No, the question is "does DD halt?" That's the ONLY question that
    matters.

    The actual question is:
    What behavior does the actual input actually specify?

    No, the actual question is "does DD halt?"

    And it does.

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Mon Aug 25 21:42:22 2025
    On 8/25/25 9:20 PM, olcott wrote:
    On 8/25/2025 7:55 PM, Richard Heathfield wrote:
    On 26/08/2025 01:31, olcott wrote:
    On 8/25/2025 6:27 PM, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing. >>>>>>
    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow doesn't
    halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's more ways to
    stop a C function than to wait until it is "reaching a simulated
    "return" statement final halt state in a finite number of steps".


    Yet we are using C functions only to model the
    behavior of Turing machines. The only way for
    a Turing machine to halt is to reach a final
    halt state.

    Fair point, but then a DD Turing machine can't halt while HHH is
    running a simulation of it, because while HHH is running a simulation
    of it it's on hold waiting for HHH to report, and you can't reach a
    final halt state while you're waiting for a result from a subroutine.
    So it all comes down to what HHH reports, and we all know how that ends.


    No you have that incorrectly.
    DD correctly simulated by HHH keeps DD and the
    simulated HHH stuck in recursive emulation until
    the executed HHH kills simultaneously kills all
    simulations. A dead HHH does not report to a dead DD.

    Then your HHH doesn't do a correct simulation.

    Your problem is you think you can have two different HHHs at the same
    time, but you can't


    I invite you (and I suspect you won't bother, but one can but try) to
    consider the distinction between the question "does DD halt?" and the
    question "does my simulation tell me DD would halt if I ran it in
    simulation?"


    That is the wrong questions.

    No, it is *THE* queastion, to change it is to lie.


    The actual question is:
    What behavior does the actual input actually specify?
    This is correctly measured by DD correctly simulated
    by HHH. This does specify non halting behavior.

    And the behavior of the actual input is the behavior of the program it represents, or the actual correct simulation of this exact input, which included the code of the HHH that you claim to give the right answer.

    Since that aborts, that *IS* the input, and it will halt when correctly simulated, as opposed to your lie that uses the wrong HHH and the wrong
    DD, because you think one program can be two different one.



    Those two questions are not the same, and they appear to have very
    different answers.




    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Tue Aug 26 03:08:31 2025
    On 26/08/2025 03:04, olcott wrote:
    On 8/25/2025 8:35 PM, Richard Heathfield wrote:
    On 26/08/2025 02:20, olcott wrote:
    On 8/25/2025 7:55 PM, Richard Heathfield wrote:
    On 26/08/2025 01:31, olcott wrote:
    On 8/25/2025 6:27 PM, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer
    executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow
    doesn't halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's
    more ways to stop a C function than to wait until it is
    "reaching a simulated "return" statement final halt state
    in a finite number of steps".


    Yet we are using C functions only to model the
    behavior of Turing machines. The only way for
    a Turing machine to halt is to reach a final
    halt state.

    Fair point, but then a DD Turing machine can't halt while HHH
    is running a simulation of it, because while HHH is running a
    simulation of it it's on hold waiting for HHH to report, and
    you can't reach a final halt state while you're waiting for a
    result from a subroutine. So it all comes down to what HHH
    reports, and we all know how that ends.


    No you have that incorrectly.
    DD correctly simulated by HHH keeps DD and the
    simulated HHH stuck in recursive emulation until
    the executed HHH kills simultaneously kills all
    simulations. A dead HHH does not report to a dead DD.

    No you have that incorrectly. I'm not talking about the
    behaviour of DD correctly simulated by HHH. I'm talking about
    DD's behaviour when it's running, i.e, when it's *not* being
    simulated.


    Then you are not talking about halt deciders

    Correct. I'm talking about DD. Well done!

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Tue Aug 26 04:42:09 2025
    On 26/08/2025 04:13, olcott wrote:
    On 8/25/2025 9:08 PM, Richard Heathfield wrote:
    On 26/08/2025 03:04, olcott wrote:
    On 8/25/2025 8:35 PM, Richard Heathfield wrote:
    On 26/08/2025 02:20, olcott wrote:
    On 8/25/2025 7:55 PM, Richard Heathfield wrote:
    On 26/08/2025 01:31, olcott wrote:
    On 8/25/2025 6:27 PM, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer
    executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack
    overflow doesn't halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's
    more ways to stop a C function than to wait until it is
    "reaching a simulated "return" statement final halt state
    in a finite number of steps".


    Yet we are using C functions only to model the
    behavior of Turing machines. The only way for
    a Turing machine to halt is to reach a final
    halt state.

    Fair point, but then a DD Turing machine can't halt while
    HHH is running a simulation of it, because while HHH is
    running a simulation of it it's on hold waiting for HHH to
    report, and you can't reach a final halt state while you're
    waiting for a result from a subroutine. So it all comes
    down to what HHH reports, and we all know how that ends.


    No you have that incorrectly.
    DD correctly simulated by HHH keeps DD and the
    simulated HHH stuck in recursive emulation until
    the executed HHH kills simultaneously kills all
    simulations. A dead HHH does not report to a dead DD.

    No you have that incorrectly. I'm not talking about the
    behaviour of DD correctly simulated by HHH. I'm talking about
    DD's behaviour when it's running, i.e, when it's *not* being
    simulated.


    Then you are not talking about halt deciders

    Correct. I'm talking about DD. Well done!


    I am talking about DD simulated by HHH resulting
    in the exact same non-halting behavior as
    ⟨Ĥ⟩ ⟨Ĥ⟩ simulated by Ĥ.embedded_H:

    DD simulated by HHH is of no interest to the Halting Problem.

    The Halting Problem only wants to know whether DD halts.

    If you want to investigate its behaviour by simulation, *fine*,
    but that simulation can only ever be descriptive, not
    prescriptive. If your simulation fails to provide the answer
    everybody else observes by direct execution, it's the simulation
    that's wrong.

    DD halts. If your "correct simulation" disagrees, your "correct
    simulation" is incorrect.

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Tue Aug 26 08:28:26 2025
    On 26/08/2025 05:25, olcott wrote:
    On 8/25/2025 10:42 PM, Richard Heathfield wrote:

    <snip>

    DD simulated by HHH is of no interest to the Halting Problem.

    The Halting Problem only wants to know whether DD halts.


    It does not. It needs HHH to compute the mapping from its input
    to the actual behavior actually specified by this input.

    The actual behaviour specified by DD is to halt.

    HHH fails to determine this. HHH is therefore not for purpose..

    One way to do that is DD correctly simulated by HHH.

    "Correctly" Rather implies getting the answer right.

    If you want to investigate its behaviour by simulation, *fine*,
    but that simulation can only ever be descriptive, not
    prescriptive. If your simulation fails to provide the answer
    everybody else observes by direct execution, it's the
    simulation that's wrong.


    Just the opposite.

    No, sir. By asserting what everyone can see to be false, you make
    a mockery of yourself.

    If the behavior of the simulated input
    ever diverges from any other behavior it is the behavior of
    the simulated input that counts.

    No, what matters is DD's behaviour according to the rules of C.
    If you don't want the rules of C to apply, pick a different language.

    According to the rules of C, DD halts. If your "correct
    simulation" disagrees, your "correct simulation" is incorrect.

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Tue Aug 26 07:18:14 2025
    On 8/25/25 10:04 PM, olcott wrote:
    On 8/25/2025 8:35 PM, Richard Heathfield wrote:
    On 26/08/2025 02:20, olcott wrote:
    On 8/25/2025 7:55 PM, Richard Heathfield wrote:
    On 26/08/2025 01:31, olcott wrote:
    On 8/25/2025 6:27 PM, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing. >>>>>>>>
    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow doesn't >>>>>>> halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's more ways
    to stop a C function than to wait until it is "reaching a
    simulated "return" statement final halt state in a finite number
    of steps".


    Yet we are using C functions only to model the
    behavior of Turing machines. The only way for
    a Turing machine to halt is to reach a final
    halt state.

    Fair point, but then a DD Turing machine can't halt while HHH is
    running a simulation of it, because while HHH is running a
    simulation of it it's on hold waiting for HHH to report, and you
    can't reach a final halt state while you're waiting for a result
    from a subroutine. So it all comes down to what HHH reports, and we
    all know how that ends.


    No you have that incorrectly.
    DD correctly simulated by HHH keeps DD and the
    simulated HHH stuck in recursive emulation until
    the executed HHH kills simultaneously kills all
    simulations. A dead HHH does not report to a dead DD.

    No you have that incorrectly. I'm not talking about the behaviour of
    DD correctly simulated by HHH. I'm talking about DD's behaviour when
    it's running, i.e, when it's *not* being simulated.


    Then you are not talking about halt deciders
    that can only report on the actual behavior that
    their inputs actually specify.


    No, you are not talking about Halt Deciders, as for them, their input
    specifies the behavior of the program they represent.

    Your POOP deciders try to decide on the nonsense of what they would do
    if HHH wasn't HHH but a UTM, including changing the code of the input.

    Sorry, that is just showing that you "logic" is based on incorrect
    definitions and lies.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Tue Aug 26 07:22:39 2025
    On 8/26/25 12:25 AM, olcott wrote:
    On 8/25/2025 10:42 PM, Richard Heathfield wrote:
    On 26/08/2025 04:13, olcott wrote:
    On 8/25/2025 9:08 PM, Richard Heathfield wrote:
    On 26/08/2025 03:04, olcott wrote:
    On 8/25/2025 8:35 PM, Richard Heathfield wrote:
    On 26/08/2025 02:20, olcott wrote:
    On 8/25/2025 7:55 PM, Richard Heathfield wrote:
    On 26/08/2025 01:31, olcott wrote:
    On 8/25/2025 6:27 PM, Richard Heathfield wrote:
    On 25/08/2025 21:57, André G. Isaak wrote:
    On 2025-08-25 09:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps. >>>>>>>>>>>>
    No, it isn't.

    Halting is defined as coming to a stop and so no longer >>>>>>>>>>>> executing.

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42);  /* may halt */

    void foo(void)
    {
       foo();  /* halts when it smashes its stack */
    }

    Here I'm going to have to side with Olcott.

    Rather you than me.

    A recursive function that crashes due to a stack overflow >>>>>>>>>>> doesn't halt in any meaningful sense of the word.

    Doesn't exactly keep going, either.

    But I hope you take the more general point that there's more >>>>>>>>>> ways to stop a C function than to wait until it is "reaching a >>>>>>>>>> simulated "return" statement final halt state in a finite
    number of steps".


    Yet we are using C functions only to model the
    behavior of Turing machines. The only way for
    a Turing machine to halt is to reach a final
    halt state.

    Fair point, but then a DD Turing machine can't halt while HHH is >>>>>>>> running a simulation of it, because while HHH is running a
    simulation of it it's on hold waiting for HHH to report, and you >>>>>>>> can't reach a final halt state while you're waiting for a result >>>>>>>> from a subroutine. So it all comes down to what HHH reports, and >>>>>>>> we all know how that ends.


    No you have that incorrectly.
    DD correctly simulated by HHH keeps DD and the
    simulated HHH stuck in recursive emulation until
    the executed HHH kills simultaneously kills all
    simulations. A dead HHH does not report to a dead DD.

    No you have that incorrectly. I'm not talking about the behaviour
    of DD correctly simulated by HHH. I'm talking about DD's behaviour >>>>>> when it's running, i.e, when it's *not* being simulated.


    Then you are not talking about halt deciders

    Correct. I'm talking about DD. Well done!


    I am talking about DD simulated by HHH resulting
    in the exact same non-halting behavior as
    ⟨Ĥ⟩ ⟨Ĥ⟩ simulated by Ĥ.embedded_H:

    DD simulated by HHH is of no interest to the Halting Problem.

    The Halting Problem only wants to know whether DD halts.


    It does not. It needs HHH to compute the mapping from its input to the
    actual behavior actually specified by this input. One way to do that
    is DD correctly simulated by HHH.

    Sure it does, why do you think the question is about programs halting,
    since halting is only a property of programs.

    Yes, it NEEDS HHH to compute the actual behavior of its input, which is
    the behavior of the program it represents. If HHH COULD actually
    simulate that input, it would be the right answer, but it needs to be
    THAT HHH correctly simulating THAT input, which if it aborts its
    simulation, it doesn't do.

    You just confuse yourself by forgetting (or never having learned) what a program is,


    If you want to investigate its behaviour by simulation, *fine*, but
    that simulation can only ever be descriptive, not prescriptive. If
    your simulation fails to provide the answer everybody else observes by
    direct execution, it's the simulation that's wrong.


    Just the opposite. If the behavior of the simulated input
    ever diverges from any other behavior it is the behavior of
    the simulated input that counts.

    But it CAN'T and be "correct". Your problem is you think you can insert
    lies into the argument to prove what you want.

    It seems you think facts are controlled by errors of opinion.

    Sorry, that just shows your "logic" is based on the right to lie.


    DD halts. If your "correct simulation" disagrees, your "correct
    simulation" is incorrect.




    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mike Terry@21:1/5 to Richard Heathfield on Tue Aug 26 16:45:02 2025
    On 25/08/2025 16:59, Richard Heathfield wrote:
    On 25/08/2025 16:44, olcott wrote:

    <snip>

    Halting is defined as reaching a simulated "return"
    statement final halt state in a finite number of steps.

    No, it isn't.

    Halting is defined as coming to a stop and so no longer executing.

    We are interested in halting as it is defined within PO's model of computation.

    - TM <---> C function called from main()
    - TM halting <---> function called from main() returns to main.

    Note: x86utm has no reason to (and does not) support the C library containing functions/macros such
    as abort(), assert(), exit(), printf(), fopen(), signal() and so on. Think of using C as simply a
    more efficient way of writing code that could in principle be in a TM. Also he cannot use anything
    in C which breaks the application of the Linz proof argument. (That proof applies to TMs, not (a
    priori) arbitrary C programs.)

    Here are a few returnless examples:

    abort(); /* halts */

    assert(argc < 0); /* halts */

    longjmp(mainenv, 42); /* may halt */

    abort(), assert(), longjmp() and similar functions do not exist in PO's coding environment.

    void foo(void)
    {
    foo(); /* halts when it smashes its stack */
    }

    That is not "halting"; it is "crashing". TM's do not "crash", and PO's coding world does not
    include "crashing". If say HHH crashed in PO's x86utm, that would mean PO cannot deduce much about
    it's behaviour, because it is saying that the TM to which it would correspond is incapable of being
    handled in PO's environment.

    kill(getpid(), SIGKILL); /* halts */

    longjmp() does not exist in PO's coding environment.


    None of these (except maybe the long goto) reach a return statement, and none of them are simulated,
    but they all halt.

    None of them apply in PO's environment. :)

    I recommend a change in mindset about how C fits in to PO's arguments. Rather than thinking
    anything goes by default, perhaps considering "what /can/ legitimately be performed by C code in
    PO's world?" Features can't be used unless they're "not a problem".

    Things that are not a problem:
    - use of functions with their own local data
    - use of C expressions for arithmetic computations
    - array use when "safe". Including strings as arrays.
    - C flow control like if/else/while/switch/etc.

    ..i.e. some fixed list of stuff which can obviously be achieved in TMs but C is basically more
    efficient for coding.

    There is no doubt MUCH more that could be added in the list, but I'm suggesting a mindset around
    "use of C" which goes back to why PO decided to use it for practical coding reasons. Rather than
    thinking "PO is using C standard xxxx which includes [whatever feature]" think C features are not
    included by default, but can be included /if supported by their own argument that they cause no
    problem/.

    That argument has to ensure the feature does not break conditions for Linz proof to be applied -
    this is actually a larger requirement for the overall system including x86utm, and the model for
    "emulation". PO's decision to have all emulations sharing a single address space with emulated code
    being conflated with the actual running code of the process, and all data shared(!), is what forces
    a whole bunch of restrictions on how the C code is to be written [like avoiding mutable static data].


    Mike.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Heathfield@21:1/5 to olcott on Tue Aug 26 16:47:30 2025
    On 26/08/2025 16:31, olcott wrote:
    On 8/26/2025 2:28 AM, Richard Heathfield wrote:
    On 26/08/2025 05:25, olcott wrote:
    On 8/25/2025 10:42 PM, Richard Heathfield wrote:

    <snip>

    DD simulated by HHH is of no interest to the Halting Problem.

    The Halting Problem only wants to know whether DD halts.


    It does not. It needs HHH to compute the mapping from its
    input to the actual behavior actually specified by this input.

    The actual behaviour specified by DD is to halt.


    It is not the behavior specified by DD that matters.

    Oh yes it is.

    If HHH cannot correctly determine that behaviour (and it can't),
    it fails in its task of being a decider.

    It is the behavior of the input to HHH(DD) that matters.

    No, sir, it isn't. The input to HHH(DD) is a function pointer.
    Function pointers don't behave. They hold a value. The behaviour
    that matters is the behaviour of DD.

    Without knowing what HHH(DD) returns, that behaviour (in terms of
    halting, I mean) is unknowable. It only becomes clear when HHH
    returns a value to indicate its decision.

    That decision must be "DD halts" (in which case DD doesn't halt)
    or "DD doesn't halt" (in which case DD halts). Either way, HHH is
    condemned to failure.

    You say that HHH(DD) decides "doesn't halt" and must return 0.
    Plug that in, and DD halts.

    One way to derive that actual behavior actually specified
    by the input to HHH(DD) is DD emulated by HHH according
    to the semantics of the x86 language. That DD cannot possibly
    halt.

    Then that isn't the DD that HHH was asked about, because when
    HHH(DD) returns "cannot possibly halts", the DD that HHH was
    asked about clearly halts.

    You *cannot* ignore this behaviour and hope to win your claim.
    You must address it in a way that will satisfy educated and
    intelligent adults. We're not credulous AIs to have the wool
    pulled over our eyes by word salad. Stop asserting and start
    convincing.

    We know DD halts. If you want to persuade us that it doesn't, you
    have a lot of work to do.

    $ cat dd.c
    #include <stdio.h>

    #define HHH(x) 0

    int DD()
    {
    int Halt_Status = HHH(DD);
    if (Halt_Status)
    HERE: goto HERE;
    return Halt_Status;
    }

    int main()
    {
    int hhh = HHH(DD);
    int dd = DD();

    printf("Because we got here, we know that both HHH and DD
    halted.\n");

    printf("But is that what they claim?\n\n");
    printf("HHH(DD) yields %d (%s).\n",
    hhh,
    hhh ?
    "halted" :
    "incorrect claim of non-halting");

    printf("DD yields %d (%s).\n",
    dd,
    dd ?
    "halted" :
    "incorrect claim of non-halting");

    return 0;
    }
    $ gcc -o dd dd.c
    $ ./dd
    Because we got here, we know that both HHH and DD halted.
    But is that what they claim?

    HHH(DD) yields 0 (incorrect claim of non-halting).
    DD yields 0 (incorrect claim of non-halting).

    DD *halts*.

    --
    Richard Heathfield
    Email: rjh at cpax dot org dot uk
    "Usenet is a strange place" - dmr 29 July 1999
    Sig line 4 vacant - apply within

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Tue Aug 26 21:30:49 2025
    On 8/26/25 11:31 AM, olcott wrote:
    On 8/26/2025 2:28 AM, Richard Heathfield wrote:
    On 26/08/2025 05:25, olcott wrote:
    On 8/25/2025 10:42 PM, Richard Heathfield wrote:

    <snip>

    DD simulated by HHH is of no interest to the Halting Problem.

    The Halting Problem only wants to know whether DD halts.


    It does not. It needs HHH to compute the mapping from its input to
    the actual behavior actually specified by this input.

    The actual behaviour specified by DD is to halt.


    It is not the behavior specified by DD that matters.
    It is the behavior of the input to HHH(DD) that matters.

    And if that differes, you are just working on POOP, and not the Halting Problem.


    One way to derive that actual behavior actually specified
    by the input to HHH(DD) is DD emulated by HHH according
    to the semantics of the x86 language. That DD cannot possibly
    halt.



    Right, and if HHH tries to do that, it fails to answer. But then that
    *IS* what HHH is,

    If you start with an HHH that aborts to return 0, then that program HHH
    doesn't do a correct simulation so you can't use that criteria, but if
    you DO a correct simulation of that input by another simulator, we find
    it halts.

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