• Re: DDD incorrectly emulated by HHH is INCorrectly rejected as non-halt

    From Richard Damon@21:1/5 to olcott on Mon Jul 15 22:19:10 2024
    On 7/15/24 12:23 PM, olcott wrote:
    On 7/15/2024 11:03 AM, Mike Terry wrote:
    On 15/07/2024 09:59, joes wrote:
    Am Sun, 14 Jul 2024 22:35:03 -0500 schrieb olcott:
    On 7/14/2024 10:02 PM, Mike Terry wrote:
    On 15/07/2024 01:20, joes wrote:
    Am Sun, 14 Jul 2024 09:00:55 -0500 schrieb olcott:
    On 7/14/2024 3:29 AM, joes wrote:
    Am Sat, 13 Jul 2024 18:33:53 -0500 schrieb olcott:
    On 7/13/2024 6:26 PM, joes wrote:

    [0000217a][0015e2dc][0000217f] e853f4ffff call 000015d2 ; call
    HHH(DDD) Local Halt Decider: Infinite Recursion Detected Simulation >>>>>>> Stopped
    How is this detected?
    PO seems not to want to answer you, as I notice you've asked this
    question more than once and PO dodges a direct response, so I'll try. >>>>> (Alternatively, PO has provided a link to his source code in the past, >>>>> so if you can find that link you can just look the answer yourself - >>>>> the functions are all in his halt7.c file, which is compiled but not >>>>> linked, then the obj file is interpreted within his x86utm.exe (source >>>>> also given in the link.  The link might not reflect his current
    code??)
    Thank you. I didn't bother digging through their code, and they refused
    to give the abortion criterion.

    HHH [outer HHH only!] examines a global trace table of simulated
    instruction (from all simulation levels merged together).  The
    particular message "Infinite Recursion Detected Simulation Stopped"
    seems to be issued when:
    -  last instruction is a CALL -  working backwards through the merged >>>>> trace table, another CALL is encountered -  ..which is issued at the >>>>> same address -  ..and is calling to the same address -  ..and no
    "conditional branch" instructions occur in the trace table
           between the two call instructions

    KEY TO NOT BEING MISLED BY THE ABOVE:

    0. The "Infinite Recursion Detected Simulation Stopped" message is
    just
    a printf.
         It does not prove that /actual/ infinite recursion was detected - >>>>>      on the contrary,
         all here but PO realise that the recursion detected is just
         finite recursion.

    1. The trace table being examined is NOT an x86 processor trace -
    it is
    a "merged simulation trace" containing entries for ALL SIMULATION
         LEVELS.
         So the two CALL instructions are not referring to one single x86 >>>>> processor.
    When emulated DDD calls HHH(DDD) the outer HHH emulates itself
    emulating
    DDD.
    I think that joes does not understand these things.

         Typically, the last call instruction is from a deeper nested >>>>>      simulation than the earlier detected call instruction.  The outer
         simulations are all
         still running, but do not appear in the trace table or logs
    presented by PO due to the next note.

    2. The searched trace table is filtered to only contain instructions >>>>> within the C function D/DD/DDD/.. !!
         YES, YOU READ THAT RIGHT!  ALL CODE IN HHH IS TOTALLY IGNORED, >>>>> INCLUDING
         THE CONDITIONAL BRANCH INSTRUCTIONS THAT ARE TESTING THE VERY >>>>>      ABORT TESTS THAT CAUSE OUTER HHH TO ABORT.

    3. Inner HHH's do not perform the same tests as above, because they
    inspect a global
         variable which tells them they are inner HHH's.  Yeah, that means
    the simulation
         is completely broken logically... [but... the outer HHH will >>>>>      abort first, so
         PO might argue the outcome will be the same, even though
         logically it is broken...]
    Ah, and here I believed them when they said they had rewritten it.

    I doubt he has done it properly if at all.  I.e. I'm confident there
    will still be mutable static data giving different code paths for
    outer/inner executions.


    That is counter-factual.

    I offered to help PO sort out the required recursive logic but this
    was ignored, PO saying it would take him thousands of years(?) to do
    it correctly.  I reckon anyone else here would fix it in a couple of
    hours!


    *THIS IS THE KEY POINT NEEDING MIKES REVIEW*
    I propose that the use of static local variables to
    pass information up from the slaves to the master
    does not violate computability.


    But the inner one CAN NOT KNOW it is an inner one without violating the constraint.

    Now, all this seems to be an attempt to make it so the decider can know
    that it is seeing a copy of itself, but once it knows that, then the
    necessary condition that whatever the outer one does must be compatible
    with what it has decided the inner one will do applies, or you are just admitting that it did incorrect logic on the determination of the
    behavior of the inner one. Remember also, just because the outer
    simulator aborts the inner doesn't mean the behavior of the program
    represented by the input stopped progressing, as ALL copies of it do the
    same thing, and continue in their behavior till they reach their end.

    And of course, the REAL problem is figuring out how every HHH can return
    to main but not to DDD, which means that it CAN'T be a pure function, as
    that violates the requirement. This is because BY DEFINITION, the
    "behavior of the input" is the actual behavior of the program that it represents, and NOT the results of the PARTIAL emulation done by the HHH
    that returned the answer.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Damon@21:1/5 to olcott on Tue Jul 16 21:11:02 2024
    On 7/16/24 11:57 AM, olcott wrote:
    On 7/16/2024 2:20 AM, Mikko wrote:
    On 2024-07-15 12:22:19 +0000, olcott said:

    On 7/15/2024 3:49 AM, joes wrote:
    Am Sun, 14 Jul 2024 19:30:27 -0500 schrieb olcott:
    On 7/14/2024 7:20 PM, joes wrote:
    Am Sun, 14 Jul 2024 09:00:55 -0500 schrieb olcott:
    On 7/14/2024 3:29 AM, joes wrote:
    Am Sat, 13 Jul 2024 18:33:53 -0500 schrieb olcott:
    On 7/13/2024 6:26 PM, joes wrote:
    Can you elaborate? All runtime instances share the same static >>>>>>>>>> code.
    I am talking about the inner HHH which is called by the simulated >>>>>>>>>> DDD. That one is, according to you, aborted. Which is wrong, >>>>>>>>>> because by virtue of running the same code, the inner HHH aborts >>>>>>>>>> ITS simulation of DDD calling another HHH.
    What are the twins and what is their difference? Do you disagree >>>>>>>> with
    my tracing?

    The directly executed DDD is like the first call of infinite
    recursion. The emulated DDD is just like the second call of infinite >>>>>>> recursion. When the second call of infinite recursion is aborted >>>>>>> then
    the first call halts.
    Not really. Execution does not continue.

    void Infinite_Recursion()
    {
    Infinite_Recursion();
    }
    The above *is* infinite recursion.
    A program could emulate the above code and simply skip line 3
    causing
    Infinite_Recursion() to halt.
    That would be incorrect.

    When DDD calls HHH(DDD) HHH returns.
    Therefore it does not need to be aborted.

    When DDD correctly emulated by HHH the call never returns as is
    proven
    below. The executed DDD() has HHH(DDD) skip this call.
    I do not see this below.

    HHH(DDD) must skip this call itself by terminating the whole DDD >>>>>>> process.

    Because this HHH does not know its own machine address HHH only sees >>>>>>> that DDD calls a function that causes its first four steps to be >>>>>>> repeated. HHH does not know that this is recursive simulation. To >>>>>>> HHH
    it looks just like infinite recursion.

    New slave_stack at:1038c4 -- create new process context for 1st DDD >>>>>>> Begin Local Halt Decider Simulation   Execution Trace Stored
    at:1138cc

    [0000217a][001138b4][0000217f] e853f4ffff call 000015d2 ; call
    HHH(DDD) New slave_stack at:14e2ec -- create new process context for >>>>>>> 2nd DDD

    [0000217a][0015e2dc][0000217f] e853f4ffff call 000015d2 ; call
    HHH(DDD) Local Halt Decider: Infinite Recursion Detected Simulation >>>>>>> Stopped
    How is this detected? Is it also triggered when calling a function >>>>>> in a
    loop?

    You never bothered to answer whether or not you have 100%
    understanding
    of infinite recursion. If you don't then you can never understand
    what I
    am saying. If you do that I already proved my point. Here is the proof >>>>> again:
    As if you would believe me.
    You never bothered to answer my questions (see above).
    That only proves that HHH and DDD halt.


    This *is* an answer too difficult for you to understand.

    New slave_stack at:1038c4
    Begin Local Halt Decider Simulation   Execution Trace Stored at:1138cc >>> [00002172][001138bc][001138c0] 55         push ebp      ; housekeeping
    [00002173][001138bc][001138c0] 8bec       mov ebp,esp   ; housekeeping
    [00002175][001138b8][00002172] 6872210000 push 00002172 ; push DDD
    [0000217a][001138b4][0000217f] e853f4ffff call 000015d2 ; call HHH(DDD)
    New slave_stack at:14e2ec
    [00002172][0015e2e4][0015e2e8] 55         push ebp      ; housekeeping
    [00002173][0015e2e4][0015e2e8] 8bec       mov ebp,esp   ; housekeeping
    [00002175][0015e2e0][00002172] 6872210000 push 00002172 ; push DDD
    [0000217a][0015e2dc][0000217f] e853f4ffff call 000015d2 ; call HHH(DDD)
    Local Halt Decider: Infinite Recursion Detected Simulation Stopped

    The trace does not show that HHH returns so there is no basis to
    think that HHH is a decider.


    The trace shows the data of the executed program of HHH that
    does halt. I will have to put the whole thing into a PDF.

    Excpet that it is INCORRECT because a call instruction, needs to be
    followed by the emulation of the instruction at the destination of the call.

    The fact that you STILL don't understand this, just shows that you seem
    to be INCAPABLE of understanding about how computers actually work.

    That, or you are just a pathological liar that doesn't care about truth.


    Most of what you need to see is on the last page.
    The x86 source-code of DDD, main() and the full
    execution trace of DDD emulated by HHH and DDD
    emulated by the emulated HHH are on this page. https://liarparadox.org/HHH(DDD)_Trace.pdf // 38 pages

    Which isn't a correct emulation of DDD by HHH.

    So, you are just ADMITTING that you are just a LIAR.


    This shows the full execution trace yet is much
    more difficult to see the execution trace of DDD emulated by HHH https://liarparadox.org/HHH(DDD)_Full_Trace.pdf // 196 pages
    I will update it to highlight machine code lines of DDD in yellow


    No it isn't, and what you are showing is just a LIE.

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