Sujet : Re: Hypothetical possibilities --- Complete Proof
De : richard (at) *nospam* damon-family.org (Richard Damon)
Groupes : comp.theoryDate : 03. Aug 2024, 01:12:23
Autres entêtes
Organisation : i2pn2 (i2pn.org)
Message-ID : <449d4de351f2890de028f96a3ab5a758c9ce6e72@i2pn2.org>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
User-Agent : Mozilla Thunderbird
On 8/2/24 6:23 PM, Mike Terry wrote:
On 02/08/2024 19:25, Richard Damon wrote:
On 8/2/24 1:39 PM, Mike Terry wrote:
On 02/08/2024 11:12, Mikko wrote:
On 2024-08-01 13:29:24 +0000, olcott said:
>
On 8/1/2024 8:12 AM, Fred. Zwarts wrote:
Op 01.aug.2024 om 14:20 schreef olcott:
On 8/1/2024 3:10 AM, Fred. Zwarts wrote:
Op 31.jul.2024 om 23:23 schreef olcott:
On 7/31/2024 3:01 PM, Fred. Zwarts wrote:
Op 31.jul.2024 om 17:14 schreef olcott:
On 7/31/2024 3:44 AM, Fred. Zwarts wrote:
Op 31.jul.2024 om 06:09 schreef olcott:
>
machine stack stack machine assembly
address address data code language
======== ======== ======== ========= =============
[00002192][00103820][00000000] 55 push ebp
[00002193][00103820][00000000] 8bec mov ebp,esp
[00002195][0010381c][00002172] 6872210000 push 00002172 ; push DDD
[0000219a][00103818][0000219f] e833f4ffff call 000015d2 ; call HHH(DDD)
New slave_stack at:1038c4
>
We don't show any of HHH and show the execution trace of
of just DDD assuming that HHH is an x86 emulator.
>
This assumption is incorrect if it means that HHH is an unconditional simulator that does not abort.
This algorithm is used by all the simulating termination analyzers:
<MIT Professor Sipser agreed to ONLY these verbatim words 10/13/2022>
*If simulating halt decider H correctly simulates its input D*
*until H correctly determines that its simulated D would never*
*stop running unless aborted* then
>
H can abort its simulation of D and correctly report that D
specifies a non-halting sequence of configurations.
</MIT Professor Sipser agreed to ONLY these verbatim words 10/13/2022>
>
So, Sipser only agreed to a correct simulation, not with an incorrect simulation that violates the semantics of the x86 language by skipping the last few instructions of a halting program.
>
>
int DD()
{
int Halt_Status = HHH(DD);
if (Halt_Status)
HERE: goto HERE;
return Halt_Status;
}
>
int main()
{
HHH(DD);
}
>
DD correctly emulated by HHH cannot possibly reach its own
second line. I switched to DDD correctly emulated by HHH
>
But it has been proven that no such HHH exists that simulates itself correctly. So, talking about a correct simulation by HHH is vacuous word salad.
>
because only C experts understood the above example and we
never had any of those here.
>
There are many C experts that looked at it, but you only got critic, because you keep hiding important properties of HHH, which made the conclusion impossible.
>
The following is all that is needed for 100% complete proof
that HHH did emulate DDD correctly according to the semantics
of the x86 language and did emulate itself emulating DDD
according to these same semantics.
>
You are repeating the same false claim with out any self-reflection. It has been pointed out that there are many errors in this proof.
Why repeating such errors?
>
>
_DDD()
[00002172] 55 push ebp ; housekeeping
[00002173] 8bec mov ebp,esp ; housekeeping
[00002175] 6872210000 push 00002172 ; push DDD
[0000217a] e853f4ffff call 000015d2 ; call HHH(DDD)
[0000217f] 83c404 add esp,+04
[00002182] 5d pop ebp
[00002183] c3 ret
Size in bytes:(0018) [00002183]
>
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)
>
The trace stops and hides what happens when 000015d2 is called.
Olcott is hiding the conditional branch instructions in the recursion.
>
>
*Here is the full trace where nothing is hidden*
https://liarparadox.org/HHH(DDD)_Full_Trace.pdf
>
On page 36 of that "trace"
[0000128c][0010379f][00000018] e8e6f4ffff call 00000777
is not followed by the trace of 00000777. Instead the trace continues
with the next instruction after the return without any comment about
the omission. Meaning of 00000777 is not told.
>
>
777 is the address of Allocate, which is one of PO's "primative ops" within his "computing model". (Similar to his DebugStep().)
>
It is implemented inside x86utm.exe (his COFF obj code runner), not in the user code DDD/HHH/etc. in the obj file, and so we would not expect to see any trace entries for its internals. When the op concludes, rax has the address of the allocated memory, which is consistent with how a normal function would have returned the address.
>
You can say correctly that PO has not explained this, but then he provided the full trace under protest, so it's understandable that he has not previously explained everything in it. I'm surprised that his response to your post was both to ignore the question and accuse you of playing sadistic head games, as the question was perfectly sensible.
>
You can look up the 777 address in the listing at the start of the trace and it's there along with a bunch of other routines which appear to just return without doing anything - those are all PO's primitive ops. If you feel a need to understand exactly what they do, you'll need to check his source code! (Although for Allocate there is no big surprise...)
>
>
So your observation isn't really a problem beyond not being properly explained. An actual problem seen in his trace data is that the simulation of DDD does not track the behaviour of the unsimulated DDD. I.e. his simulation is incorrect. (PO knows about that but claims it doesn't matter, although on other occasions he still claims the simulation is correct.)
>
>
Mike.
>
>
But the bigger error that totally negates this trace is if you at where it begins, it is at program address 00002197, which just the page before is shown to be the address of _main.
>
Since HHH was not given the address of main to start with, this can not be the trace that HHH itself is generating and looking at, but is instead the trace of the running of that top level HHH.
Well, all PO's trace logs start with main! Something has to set up the required computation [aka the required TM + input tape]. That could be HHH(DDD), or maybe DDD() or whatever. PO might have done this through extra invocation arguments to x86utm.exe, and then there would have been no need to code a main() in his halt7.c user code file. But that would be decidedly fiddly, so having a fixed entry function main() is an ok convenience I'd say. The main() is not really part of his computation model, but x86utm traces the lot.
Normally when PO gives code snippets, he includes the main() routine. In this case it is main calling HHH(DDD), so HHH as you say is the outer level HHH. (Later on in the trace we see simulated HHH entries...)
Since that shows the trace isn't what he claims it is, nothing it says means anything for his argument.
I can't see what PO claims the trace to be. That trace was taken and published some weeks ago, and doesn't match up exactly with todays partial trace - e.g. the addresses of HHH/DDD don't match and so on. If it's just wrong through being out of date, or because it has the main() trace on the front, that's not the worst of crimes...
I see upthread that someone pointed out that the filtered trace "..stops and hides what happens when 000015d2 is called." Well, the full trace does show the instructions of HHH being executed [even if the data is a bit out of date], and of course there are loads of conditional branches... so everyone should be happy! :)
>
In fact, the way the trace is produced, it is clear that the tracing code doesn't care about what level of simulation it is working but calls to "DebugStep" just inject the data they trace as part of the code that is being traced, which isn't actually what is happening in the processor.
That's correct. The full trace proceeds showing HHH executing its code as we would expect, and after some time HHH (actually a routine called by HHH) invokes a DebugStep op. We can see that the DebugStep op stepped HHH's simulation one instruction, which also appears in trace. Here is where that happens:
,,,
[000011eb][00103783][00103863] 8b4d1c mov ecx,[ebp+1c]
[000011ee][00103783][00103863] 8b11 mov edx,[ecx]
[000011f0][0010377f][00103827] 52 push edx
[000011f1][0010377f][00103827] e8b1f5ffff call 000007a7 <=== DebugStep
[00002177][00113897][0011389b] 55 push ebp <=== simulated instruction
[000011f6][0010378b][90909090] 83c40c add esp,+0c <=== next instructin after DebugStep
[000011f9][0010378b][90909090] e8e9f5ffff call 000007e7
...
The "push ebp" above is the first simulated instruction, and just appears in the trace straight after the call to DebugStep. [Note the apparent discontinuities in IP address and ESP (cols 1&2 resp.) Yeah I know, /why isn't there a simulation level column/ ?]
We could say that the trace as shown is a log of all the instructions x86utm "executes" in succession, so it is a merge of entries from all simulation levels - certainly it's not the x86 "processor trace" it might be taken to be.
Note - the "push ebp" instruction is the first simulated instruction of DDD(), which at least is the instruction we would expect it to be. In PO's normal "filtered" log output, all the other instructions above wouldn't appear as they're not from DDD.
Of course these traces don't support PO's overall case he is claiming, because the (various) logs show that DDD halts, and that HHH(DDD) reports DDD as non-halting, exactly as Linz/Sipser argue. Er, that's about it!
Whether it supports some minutia of what PO is currently arguing about - you'd have to explain to me exactly what he is claiming! (um, Please don't!)
>
This seems to be part of the source for his confusion, and the tool he uses to try to spread his lies.
>
such results should, at most, be inserted as a comment about what the results computed as meta-logic of the code just emulated did.
>
But of course, noting that this second layer is just meta-results, and that the original emulator always had the option of stopping its emulation ruins his argument that the recursion is necessarily infinite.
It's hard to pin down confusion sources. I agree PO doesn't need x86utm logs to argue his case, and including them doesn't /prove/ anything, especially when he admits the simulated code uses mutable static data to modify the behaviour of the simulation so that it does not match the unsimulated (outer) computation.
I think PO views x86utm as some kind of "ultra authority" he can appeal to, to avoid having to actually prove his claims. [Which is funny, because the logs don't support his claims, but for some reason that passes him by...]
Mike.
The problem is that he calls them traces of the emulation that HHH does, and it should never see that main, as it isn't part of what he has defined as the input.
It is clear that this output is the output generated by x86utm, NOT just his HHH. As such, it is not the output he claims.
It seems clear that he can't figure out how to get the x86UTM program to create just the trace of what HHH sees,
He *CLAIMS* that HHH actually works on the full trace of DDD going into HHH, but apparently there is no way for him to show such a trace.
WHen I last look in detail at the code, his H didn't actually trace into the decider itself, but just assumed that the decider was a emulator and started a nested emulation of it, just like he is currently showing. THe key point is he doesn't consider that the decider is a decider, but thinks of it as just an unconditional emuator, which is of course, and incorrect assumption.
The problem he had with the version that tried to actually emulate the emulator but he needed the "illegal" static memory to let the decider know the recursion happened, so I suspect he just knows that he isn't actually doing what he claims, but is still using his old tricks, and just trying to hide it.
The code does still appear to detecting if it is the "root" decider or not, but I am not sure if the code actually is doing anything.