• Re: stateful procedures --- Kaz breakthrough

    From Richard Damon@21:1/5 to olcott on Tue Aug 12 21:46:23 2025
    On 8/12/25 7:27 PM, olcott wrote:
    On 8/12/2025 2:50 PM, Kaz Kylheku wrote:

    If you're trying to demonstrate your work using stateful procedures, you
    must be explicit about revealing the state, and ensure that two
    instances of a computations which you are identifying as being of the
    same computation have exactly the same initial state, same inputs,
    and same subsequent state transitions. You cannot call two different
    computations with different state transitions "DD" and claim they are
    the same.


    Simulating termination analyzer HHH1 is exactly the
    same as HHH except that DD does not call HHH1.

    DD simulated by HHH1 has the exact same behavior
    as the directly executed DD().

    typedef int (*ptr)();
    int HHH(ptr P);

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

    DD simulated by HHH according to Kaz should be called
    DD.HHH because it does not have the same state as DD.HHH1.


    What "state" that affects the simulation was different?

    You seem to have the mistaken idea that things that aren't part of the
    input can affect the behavior of a program.

    They seem to have the same initial state.
    They both have no input.
    *They do have different state transitions*

    Which one?

    You can't seem to point to it.


    *This is because when DD calls HHH(DD) it is*
    *calling its own simulator to be simulated*
    *again and DD never calls HHH1(DD) at all*


    Which does WHAT to the call HHH Instruction?

    Where in the x86 definition of the call instruction is there anything
    that can make it different based on who is simulating it?

    It seems your problem is you reach the end of what you lies can cover.

    The call HHH instruction, no matter who is simulating it, pushes the
    currect program counter on the stack, then sets the program counter to
    the address of HHH, then executes that instruction at that address.

    Nothing affected by the simulator being HHH.

    All you are doing is showing you don't understand what objective truth is.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kaz Kylheku@21:1/5 to olcott on Wed Aug 13 17:32:39 2025
    On 2025-08-12, olcott <[email protected]> wrote:
    On 8/12/2025 2:50 PM, Kaz Kylheku wrote:

    If you're trying to demonstrate your work using stateful procedures, you
    must be explicit about revealing the state, and ensure that two
    instances of a computations which you are identifying as being of the
    same computation have exactly the same initial state, same inputs,
    and same subsequent state transitions. You cannot call two different
    computations with different state transitions "DD" and claim they are
    the same.


    Simulating termination analyzer HHH1 is exactly the
    same as HHH except that DD does not call HHH1.

    Nope! If HHHH and HHH1 are exactly the same, it means,
    mathematically, that those identifiers are just different
    names for the same entity, which are interchangeable.

    That means that DD does call HHH1, just using the name HHH.

    Just like (2 + 2) and (3 + 1) are interchangeable, right?

    DD simulated by HHH1 has the exact same behavior
    as the directly executed DD().

    typedef int (*ptr)();
    int HHH(ptr P);

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

    If it so happens that HHH1 /isn't/ the same as HHH, (which
    can easily be the case in a system which does invalid
    things with backchannel communication via global variables
    and whatnot) then, yes, HHH1 can correctly decide it.

    DD simulated by HHH according to Kaz should be called
    DD.HHH because it does not have the same state as DD.HHH1.

    They seem to have the same initial state.
    They both have no input.
    *They do have different state transitions*

    Well, That's a problem, isn't it.

    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @[email protected]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mike Terry@21:1/5 to Kaz Kylheku on Wed Aug 13 21:39:50 2025
    On 13/08/2025 18:32, Kaz Kylheku wrote:
    On 2025-08-12, olcott <[email protected]> wrote:
    On 8/12/2025 2:50 PM, Kaz Kylheku wrote:

    If you're trying to demonstrate your work using stateful procedures, you >>> must be explicit about revealing the state, and ensure that two
    instances of a computations which you are identifying as being of the
    same computation have exactly the same initial state, same inputs,
    and same subsequent state transitions. You cannot call two different
    computations with different state transitions "DD" and claim they are
    the same.


    Simulating termination analyzer HHH1 is exactly the
    same as HHH except that DD does not call HHH1.

    Nope! If HHHH and HHH1 are exactly the same, it means,
    mathematically, that those identifiers are just different
    names for the same entity, which are interchangeable.

    That means that DD does call HHH1, just using the name HHH.

    Just like (2 + 2) and (3 + 1) are interchangeable, right?

    DD simulated by HHH1 has the exact same behavior
    as the directly executed DD().

    typedef int (*ptr)();
    int HHH(ptr P);

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

    If it so happens that HHH1 /isn't/ the same as HHH, (which
    can easily be the case in a system which does invalid
    things with backchannel communication via global variables
    and whatnot) then, yes, HHH1 can correctly decide it.

    I've explained to PO (several times) why HHH1 isn't a proper clone of HHH, but he doesn't get any of it.

    HHH has mutable (local) static variables that are used to communicate between different emulation
    levels. When HHH emulates HHH, the inner HHH communicates back to the outer HHH through their
    shared static variables. HHH1 has /its own/ versions of those static variables, so inner nested
    HHHs do not communicate back to outer HHH1. That means HHH1 never monitors its nested emulated DDs
    for so-called non-termination patterns. So HHH1 emulates its (outer) DD until it halts, and
    correctly decides "halts".

    So it's all down to PO's erroneous use of mutable static data. If PO had designed this correctly,
    each emulation level would maintain its own "local" trace table, agnostic regarding its depth in any
    emulation hierarchy. Then HHH1 (directly copied from HHH) would be a genuine clone of HHH, and
    their processing would match as it should/must, and of course they would reach the same halting
    decision.

    Or even if PO used a global (shared) variable for the (mis)communication across emulation levels, at
    least that would mean HHH and HHH1 logic was the same, making their behaviour the same...

    Hmmm, sounds like PO is "doing invalid things with backchannel via global variables" or something! :)

    Mike.


    DD simulated by HHH according to Kaz should be called
    DD.HHH because it does not have the same state as DD.HHH1.

    They seem to have the same initial state.
    They both have no input.
    *They do have different state transitions*

    Well, That's a problem, isn't it.

    You might think, but not for PO.

    Mike.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Wed Aug 13 22:42:48 2025
    On 8/13/25 1:48 PM, olcott wrote:
    On 8/13/2025 12:32 PM, Kaz Kylheku wrote:
    On 2025-08-12, olcott <[email protected]> wrote:
    On 8/12/2025 2:50 PM, Kaz Kylheku wrote:

    If you're trying to demonstrate your work using stateful procedures,
    you
    must be explicit about revealing the state, and ensure that two
    instances of a computations which you are identifying as being of the
    same computation have exactly the same initial state, same inputs,
    and same subsequent state transitions. You cannot call two different
    computations with different state transitions "DD" and claim they are
    the same.


    Simulating termination analyzer HHH1 is exactly the
    same as HHH except that DD does not call HHH1.

    Nope! If HHHH and HHH1 are exactly the same, it means,
    mathematically, that those identifiers are just different
    names for the same entity, which are interchangeable.


    The C source code is exactly the same.
    Thus HHH and HHH1 are exactly the same
    except for their location in memory.

    Nope, the C source code for the C Function is the same, the C source
    code that determines the behavior of that C function isn't, as it
    includes the source code of HHH and everything it calls.

    All you are doing is proving you don't know the meaning of the terms you
    are using, but pulling wrong meanings fron other contexts.


    That means that DD does call HHH1, just using the name HHH.

    Just like (2 + 2) and (3 + 1) are interchangeable, right?

    DD simulated by HHH1 has the exact same behavior
    as the directly executed DD().

    typedef int (*ptr)();
    int HHH(ptr P);

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

    If it so happens that HHH1 /isn't/ the same as HHH, (which
    can easily be the case in a system which does invalid
    things with backchannel communication via global variables
    and whatnot) then, yes, HHH1 can correctly decide it.

    Nothing like that. DD calls the function at machine
    address 000015c3 (HHH) and not the function at machine
    address 000014f3 (HHH1).

    And both machines looked at that code, as that code is what determines
    the behavor of the function DD.

    And nothing in that code changes behavior depending on which machine is simulating it.



    DD simulated by HHH according to Kaz should be called
    DD.HHH because it does not have the same state as DD.HHH1.

    They seem to have the same initial state.
    They both have no input.
    *They do have different state transitions*

    Well, That's a problem, isn't it.


    *It is the execution context that changes*

    HOW?

    What instruction ACTUALLY corectly emulated changed its behavior based
    on that context.


    Since DD() need not be a computable function
    and in fact our purpose here is to determine
    that DD() is not a computable function then

    Well, NO Turing Machine is a computable function, it is just the
    implementation that computes some computable function.

    And DD() must be such a thing, as ALL Turing Machine compute some
    function, at least for input they halt on.


    we cannot ignore the fact that HHH(DD)==0 does
    correctly report on the actual behavior specified
    by its actual input.


    Except it doesn't except in the world that accepts you LIE about the
    meaning of that phrase.

    If HHH is a Halting Decider, the behavior specifed by an input is
    DEFINED to be the behavior of the direct execution of the program it represents.

    So, all you are doing is showing that you are just a liar that
    misdefines words.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Wed Aug 13 22:51:50 2025
    On 8/13/25 5:00 PM, olcott wrote:
    On 8/13/2025 3:39 PM, Mike Terry wrote:
    On 13/08/2025 18:32, Kaz Kylheku wrote:
    On 2025-08-12, olcott <[email protected]> wrote:
    On 8/12/2025 2:50 PM, Kaz Kylheku wrote:

    If you're trying to demonstrate your work using stateful
    procedures, you
    must be explicit about revealing the state, and ensure that two
    instances of a computations which you are identifying as being of the >>>>> same computation have exactly the same initial state, same inputs,
    and same subsequent state transitions. You cannot call two different >>>>> computations with different state transitions "DD" and claim they are >>>>> the same.


    Simulating termination analyzer HHH1 is exactly the
    same as HHH except that DD does not call HHH1.

    Nope! If HHHH and HHH1 are exactly the same, it means,
    mathematically, that those identifiers are just different
    names for the same entity, which are interchangeable.

    That means that DD does call HHH1, just using the name HHH.

    Just like (2 + 2) and (3 + 1) are interchangeable, right?

    DD simulated by HHH1 has the exact same behavior
    as the directly executed DD().

    typedef int (*ptr)();
    int HHH(ptr P);

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

    If it so happens that HHH1 /isn't/ the same as HHH, (which
    can easily be the case in a system which does invalid
    things with backchannel communication via global variables
    and whatnot) then, yes, HHH1 can correctly decide it.

    I've explained to PO (several times) why HHH1 isn't a proper clone of
    HHH, but he doesn't get any of it.


    I just did a diff. HHH1 and HHH have identical source-code.

    Then they aren't Pure funcitons, but use something that isn't part of
    the input to decide on.

    If they were identical, HHH1 would be using &HHH as the address it was
    testing to see if the input calls itself.

    Note, the "program counter" is not part of the input to a pure function,
    unless you define it as such, in which case the call to HHH and HHH1 is
    really of the form HHH(DD, HHH) and HHH1(DD, HHH1), which are differnt
    inputs.

    Sorry, all you are doing is proving you don't understand the meaning of
    the words you are using.


    Of course, you never fixed the error that made your HHH not a pure
    funciton, so it never did meet that requirement, the justification that
    it was the only way you could think of letting the simulator know the
    state of the simulation is just a fabrication that shows that you don't understand the problem.>
    HHH has mutable (local) static variables that are used to communicate
    between different emulation levels.  When HHH emulates HHH, the inner
    HHH communicates back to the outer HHH through their shared static
    variables.  HHH1 has /its own/ versions of those static variables, so
    inner nested HHHs do not communicate back to outer HHH1.  That means
    HHH1 never monitors its nested emulated DDs for so-called non-
    termination patterns.  So HHH1 emulates its (outer) DD until it halts,
    and correctly decides "halts".


    *This has nothing to do with DD correctly emulated by HHH*

    Then why don't you fix it?

    Any LIE makes a statement a LIE.


    When HHH(DD) does report on the actual behavior that its
    actual input actually specifies as measured by DD correctly
    simulated by HHH that includes that HHH does simulate an
    instance of itself simulating an instance of DD that does
    call yet another instance of HHH(DD) then HHH(DD)==0 is
    proven to be correct.

    Except that you LIE about what the "behavior of the input" means,
    because you try to lie about what a "correct simulation" means.

    The point is that "DD correctly emulated by HHH" can NOT be the correct
    meaning of the behavior of the input if THAT HHH doesn't do a correct
    emulaiton of the input because it aborts.

    All you are doing is claiming that using invalid logic is valid.


    That you once said that DD correctly simulated by HHH
    would eventually stop running on its own proves that
    you have a terrible understanding of this one point
    even though your understanding of other points seems
    flawless.

    When did anyone say that DD correctly simualted by HHH would halt?

    The claim is that DD correctly simulated will halt if HHH aborts its
    simulation and returns a value.

    Since that *IS* the behavor of your given HHH, that IS the behavior of
    the correct simulation of its input, something HHH doesn't do, and to
    try to talk about it doing so is just a LIE.


    So it's all down to PO's erroneous use of mutable static data.  If PO
    had designed this correctly, each emulation level would maintain its
    own "local" trace table, agnostic regarding its depth in any emulation
    hierarchy.  Then HHH1 (directly copied from HHH) would be a genuine
    clone of HHH, and their processing would match as it should/must, and
    of course they would reach the same halting decision.

    Or even if PO used a global (shared) variable for the
    (mis)communication across emulation levels, at least that would mean
    HHH and HHH1 logic was the same, making their behaviour the same...

    Hmmm, sounds like PO is "doing invalid things with backchannel via
    global variables" or something! :)

    Mike.


    DD simulated by HHH according to Kaz should be called
    DD.HHH because it does not have the same state as DD.HHH1.

    They seem to have the same initial state.
    They both have no input.
    *They do have different state transitions*

    Well, That's a problem, isn't it.

    You might think, but not for PO.

    Mike.




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