On 12/10/2020 9:18 AM, André G. Isaak wrote:
> On 2020-12-10 07:44, olcott wrote:
>> On 12/10/2020 12:54 AM, André G. Isaak wrote:
>>> On 2020-12-09 21:48, olcott wrote:
>>>> On 12/9/2020 10:36 PM, André G. Isaak wrote:
>>>>> On 2020-12-09 11:04, olcott wrote:
>>>>>> On 12/9/2020 10:52 AM, Kaz Kylheku wrote:
>>>>>>> On 2020-12-09, olcott <No...@NoWhere.com> wrote:
>>>>>>>> On 12/9/2020 5:43 AM, Anton Shepelev wrote:
>>>>>>>>> Ben Bacarisse to Anton Shepelev about Pete Olcott:
>>>>>>>>>
>>>>>>>>>>> That prompts an experiment: Pete Olcott provides a halt
>>>>>>>>>>> decider, and you provide a program that will fool it.
>>>>>>>>>>
>>>>>>>>>> I've presented that challenge to him and he did in fact
>>>>>>>>>> respond.
>>>>>>>>>
>>>>>>>>> OK, let us make a bargain: that sometime in 2021 Pete has
>>>>>>>>> his groundbreaking reasearch published in one of the three
>>>>>>>>> or five respectable computer-science magazines that we
>>>>>>>>> offer. The losing side sends the winner a book that he
>>>>>>>>> wants. If Pete wins, he will get about 15 books for free.
>>>>>>>>> If he loses, he shall have to buy a book for each of us :-)
>>>>>>>>> He has more than a year, so I think it a fair bargain.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> I would be happy with a fair and honest review based on paying
>>>>>>>> close
>>>>>>>> attention to what I say and staying sharply focused on the point
>>>>>>>> at hand.
>>>>>>>
>>>>>>> The problem you're going to run into is getting a correct
>>>>>>> return value out of the Halts function.
>>>>>>>
>>>>>>> You've built a system which can tell that the overall situation his
>>>>>>> runaway recursion. Somehow you hope that this can inform Halts
>>>>>>> so that Halts can return the correct value, thereby refuting proofs
>>>>>>> which rely on the impossibility of that event.
>>>>>>>
>>>>>>> However, in a nutshell, the issue is this:
>>>>>>>
>>>>>>> Even if Halts has access to a "magic oracle" which knows
>>>>>>> the halting answer for every <P, I> pair, Halts still cannot
>>>>>>> return the right answer for <H_Hat, H_Hat>.
>>>>>>>
>>>>>>> If Halts asks the magic oracle, "does H_Hat(H_Hat) halt?",
>>>>>>> the oracle will give it the correct answer.
>>>>>>>
>>>>>>> However, how can Halts return that answer? Halts is itself
>>>>>>> embedded in
>>>>>>> H_Hat, which intercepts the answer and behaves in a contradicting
>>>>>>> manner. That is inescapable.
>>>>>>
>>>>>> Even when Halts is embedded within H_Hat the master UTM based halt
>>>>>> decider sees this and decides halting correctly anyway. To do this
>>>>>> it must stop simulating its infinitely recursive input of H_Hat()
>>>>>> calling its embedded Halts().
>>>>>
>>>>> Linz's proof states that for every putative halt decider H, one can
>>>>> derive a program H_Hat such that H(H_Hat, H_Hat) cannot be
>>>>> correctly decided.
>>>>>
>>>>
>>>> Yes and I prove {Linz, Sipser, and Kozen} are wrong about this.
>>>>
>>>>> Don't you see that your "Master UTM" isn't even attempting to
>>>>> perform the computation equivalent to H(H_Hat, H_Hat); it is
>>>>> performing the computation H(main, NULL) which is something
>>>>> entirely different.
>>>>>
>>>>
>>>> I have fully operational code to prove that is ridiculous.
>>>>
>>>> Actual debug trace of H() deciding halting on H_Hat()
>>>>
>>>> Input to Microsoft C compiler, output is from generated COFF object
>>>> file. Execution trace is from an x86 emulator.
>>>>
>>>> #define HALT __asm hlt
>>>>
>>>> void H_Hat(u32 P)
>>>> {
>>>> u32 Input_Halts = H(P, P);
>>>> if (Input_Halts)
>>>> HERE: goto HERE;
>>>> else
>>>> HALT
>>>> }
>>>>
>>>> int main()
>>>> {
>>>> H((u32)H_Hat, (u32)H_Hat);
>>>> HALT;
>>>> }
>>>>
>>>> _H_Hat()
>>>> [000005e0](01) 55 push ebp
>>>> [000005e1](02) 8bec mov ebp,esp
>>>> [000005e3](01) 51 push ecx
>>>> [000005e4](03) 8b4508 mov eax,[ebp+08]
>>>> [000005e7](01) 50 push eax
>>>> [000005e8](03) 8b4d08 mov ecx,[ebp+08]
>>>> [000005eb](01) 51 push ecx
>>>> [000005ec](05) e87ffdffff call 00000370
>>>> [000005f1](03) 83c408 add esp,+08
>>>> [000005f4](03) 8945fc mov [ebp-04],eax
>>>> [000005f7](04) 837dfc00 cmp dword [ebp-04],+00
>>>> [000005fb](02) 7404 jz 00000601
>>>> [000005fd](02) ebfe jmp 000005fd
>>>> [000005ff](02) eb01 jmp 00000602
>>>> [00000601](01) f4 hlt
>>>> [00000602](02) 8be5 mov esp,ebp
>>>> [00000604](01) 5d pop ebp
>>>> [00000605](01) c3 ret
>>>>
>>>> _main()
>>>> [00000610](01) 55 push ebp
>>>> [00000611](02) 8bec mov ebp,esp
>>>> [00000613](05) 68e0050000 push 000005e0
>>>> [00000618](05) 68e0050000 push 000005e0
>>>> [0000061d](05) e84efdffff call 00000370
>>>> [00000622](03) 83c408 add esp,+08
>>>> [00000625](01) f4 hlt
>>>> [00000626](01) 5d pop ebp
>>>> [00000627](01) c3 ret
>>>>
>>>> Output_Debug_Trace() Trace_List.size(20)
>>>> [00000610](01) 55 push ebp
>>>> [00000611](02) 8bec mov ebp,esp
>>>> [00000613](05) 68e0050000 push 000005e0
>>>> [00000618](05) 68e0050000 push 000005e0
>>>> [0000061d](05) e84efdffff call 00000370 ----CALL
>>>> [00000370]
>>>> [000005e0](01) 55 push ebp
>>>> [000005e1](02) 8bec mov ebp,esp
>>>> [000005e3](01) 51 push ecx
>>>> [000005e4](03) 8b4508 mov eax,[ebp+08]
>>>> [000005e7](01) 50 push eax
>>>> [000005e8](03) 8b4d08 mov ecx,[ebp+08]
>>>> [000005eb](01) 51 push ecx
>>>> [000005ec](05) e87ffdffff call 00000370 ----CALL
>>>> [00000370]
>>>> [000005e0](01) 55 push ebp
>>>> [000005e1](02) 8bec mov ebp,esp
>>>> [000005e3](01) 51 push ecx
>>>> [000005e4](03) 8b4508 mov eax,[ebp+08]
>>>> [000005e7](01) 50 push eax
>>>> [000005e8](03) 8b4d08 mov ecx,[ebp+08]
>>>> [000005eb](01) 51 push ecx
>>>> [000005ec](05) e87ffdffff call 00000370 ----CALL
>>>> [00000370]
>>>> The PRIOR Instruction Specifies Infinite Recursion: Simulation Stopped:
>>>> Number of Instructions Executed(2777)
>>>>
>>>> Every time that the same function is called from the same machine
>>>> address a second time without any control flow instructions
>>>> in-between is a case of infinite recursion. This is shown at
>>>> execution trace lines 13-21 above.
>>>
>>> Except, as has been noted by others, your trace is incomplete.
>> I could provide 142 more pages of detail and this extra detail would
>> not change a thing.
>>
>>>>> When you add this "master UTM" to your system and claim that this
>>>>> is your actual halt detector, your H_Hat needs to be derived from
>>>>> that master UTM. It would need to do everything that your master
>>>>> UTM does (including your weird automatic invocation of Halts(main)
>>>>> etc), but at the point where your master UTM returns 'halts', it
>>>>> would need to enter an infinite loop.
>>>>
>>>> I have fully operational code to prove that is ridiculous.
>>>
>>> I don't think you grasp how proofs work. Proofs have premises and
>>> conclusions. Code traces do not. Your "fully operational code"
>>> doesn't even remotely address my objection above.
>>
>> A code trace <is> a formal proof of the execution of the x86 language.
>
> No, a code trace is not a formal proof of anything.
A code trace is a totally complete proof of what the code actually does
on its input.
>>>>> You'd need to then invoke your master UTM with an input of the
>>>>> above H_Hat, H_Hat (not of main, NULL). If you don't do this, your
>>>>> alleged 'solution' has nothing to do with Linz's proof.
>>>>>
>>>>> André
>>>>>
>>>>
>>>> Think of this is simpler terms:
>>>> I have an x86 emulator that aborts infinite loops and infinite
>>>> recursion.
>>>
>>> Which *claims* to do this. You have not proven that it actually does
>>> this reliably,
>>
>> Sure I have immediately above you just didn't bother to pay attention
>> or the x86 language is over your head.
>
> The problem is that there *are* conditional branches between the above
> calls. You just don't show them. There must be because your 'halt
> detector' makes a decision as to whether to abort at any given call.
> That involves a conditional branch.
THE MOST IMPORTANT WORDS THAT I HAVE EVER SAID ON THIS SUBJECT:
THE MOST IMPORTANT WORDS THAT I HAVE EVER SAID ON THIS SUBJECT:
THE MOST IMPORTANT WORDS THAT I HAVE EVER SAID ON THIS SUBJECT:
All conditional branches that are in the halt decider and not in the
user code can be correctly ignored within the context of the following
halt deciding criteria:
Notice the future tense of: [would not halt]
On 11/27/2020 9:02 PM, Ben Bacarisse wrote:
> A computation that would not halt if its simulation were not
> halted is indeed a non-halting computation.
On Saturday, November 28, 2020 at 2:00:28 PM UTC-8, olcott wrote:
> Every computation that would not halt if its simulation
> were not halted is by logical necessity a non-halting computation.
> And those same conditional branches also guarantee that Halts(H_Hat,
> H_Hat) will in fact halt, despite your claim to the contrary.
> Halts(H_Hat, H_Hat) would have aborted its input and halted using the
> exactly the same mechanism that your "global" decider uses had the
> global decider not aborted it prematurely.
>
> You are under the misguided impression that by calling some piece of
> code part of the 'operating system', that it somehow ceases to be part
> of a computation which calls upon it. That is simply not the case.
>
>>> nor have you shown that this has any relevance to Linz given that you
>>> are not deriving your H_Hat from your halt decider correctly.
>
> No comment on the above?
>
> André
>
I already addressed what you said.