On 10/22/2020 5:14 PM, Mike Terry wrote:
> On 22/10/2020 17:38, olcott wrote:
>> On 10/22/2020 10:25 AM, Mike Terry wrote:
>>> On 22/10/2020 15:36, olcott wrote:
>>>> On 10/22/2020 7:00 AM, Richard Damon wrote:
>>>>> On 10/22/20 12:33 AM, olcott wrote:
>>>>>>
>>>>>> The difference is that it is no longer possible for H_Hat() to do the
>>>>>> opposite of what H() decides. This transforms an undecidable problem
>>>>>> into a decidable problem.
>>>>>
>>>>> If H_Hat no longer does what the proof defined, then your
>>>>> demonstration
>>>>> is no longer applicable to the proof.
>>>>>
>>>>
>>>> If the halt decider is to report whether or not its input halts another
>>>> program can be constructed on the the basis of this halt decider that
>>>> does the opposite of whatever the halt decider decides.
>>>>
>>>> This is how H() and H_Hat() are defined in the Linz proof.
>>>>
>>>> If the halt decider is to report whether or not it aborted its input
>>>> program because its input program would otherwise cause the halt
>>>> decider
>>>> to get stuck in infinite execution then this other program can no
>>>> longer
>>>> fool its halt decider and do the opposite of whatever it decides.
>>>>
>>>> If H() aborts the execution of H_Hat() then H_Hat() cannot continue to
>>>> execute because H() has complete control over H_Hat.
>>>>
>>>> The end result of this slight change is that the halting problem can no
>>>> longer be shown to be undecidable.
>>>>
>>>
>>> It is suspicious that in none of this have you ever stated what is
>>> actually wrong in the Linz proof.
>>
>> When the halting problem is defined as:
>> bool Does_It_Halt(u32 P, u32 I)
>> another program can be constructed on the basis of Does_It_Halt() that
>> does the opposite of whatever Does_It_Halt() decides.
>>
>
> Yes, regardless of the internal details of Does_It_Halt().
>
>> When the halting problem is defined as:
>> bool Was_Its_Execution_Aborted(u32 P, u32 I)
>>
>> another program CANNOT be constructed on the basis of
>> Was_Its_Execution_Aborted() that does the opposite of whatever
>> Was_Its_Execution_Aborted() decides.
>
> Sure, if you interpret your question literally as asking whether P would
> actually be aborted if it executes under the UTM within
> Was_Its_Execution_Aborted()!
>
> However, another program CAN be constructed on the basis of
> Was_Its_Execution_Aborted() that:
> - halts if Was_Its_Execution_Aborted() decides "aborted"
> - loops if Was_Its_Execution_Aborted() decides "halted"
>
> (right?)
Wrong. There is no way to make the revised halting question contradictory.
DebugTrace() either reports that it has aborted the execution of its
input or it reports that its input has not been aborted after its input
has terminated.
> So your new question literally interpreted is irrelevant to the "does it
> /actually/ halt" problem. (I.e. the one discussed in the literature and
> specifically the Linz proof.)
>
> Let me give an example which makes that obvious...
>
> Suppose I wrote an implementation of bool Was_Its_Execution_Aborted(u32
> P, u32 I) which works like this:
> 1. Run P in our UTM until either it halts by itself,
> or 5 instructions have been executed.
> 2. If P halted by itself, report back that P halted.
> 3. Otherwise abort P, and report back that P was aborted.
>
> As you say, Was_Its_Execution_Aborted() can (will!) give a correct
> answer to the question "Would P's execution under the UTM within
> Was_Its_Execution_Aborted() be aborted?"
>
> For example, let's suppose that P actually does halt but it takes 500
> instructions. OK, we now have to perform two experiments to check
> whether Was_Its_Execution_Aborted() is answering correctly:
> - first we run Was_Its_Execution_Aborted(P, I) and
> note that it returns "execution was aborted".
> - next we trace step by step through
> Was_Its_Execution_Aborted(H_Hat, H_Hat), and note that
> indeed the execution of H_Hat WAS aborted!
>
> Was_Its_Execution_Aborted() managed to answer correctly! Yipeee.
>
> (Alternatively we could combine both of these experiments into one,
> looking for two things at once, but conceptually we have two separate
> experiments.)
>
> Unfortunately, it is now obvious that asking the question "Would P's
> execution under the UTM within Was_Its_Execution_Aborted() be aborted?"
> is not equivalent to the halting question, and the fact that such a new
> question can be correctly answered has no relevence to the HP question
> or to Linz proof.
>
That you can define a halt decider that does not meet the conventional
specs of a halt decider provide zero rebuttal what-so-ever.
> In fact doesn't the new question, literally interpreted as above, seem a
> little facile?
>
> The only way to make your new question relevant to the Linz proof would
> be if your implementation of Was_Its_Execution_Aborted() had the
> additional characteristics:
>
> a) if Was_Its_Execution_Aborted() returns "program halted"
> then H_Hat(H_Hat) [IF RUN NATIVELY] will actually terminate
YES
> b) if Was_Its_Execution_Aborted() returns "program aborted"
> then H_Hat(H_Hat) [IF RUN NATIVELY] will never halt
Not really because H_Hat() has the same halt decider as H() so when we
run H_Hat() on itself it aborts itself.
> If Was_Its_Execution_Aborted() had those properties, it could just be
> name-changed to Does_It_Halt() and I think you've already admitted
> elsewhere the Linz argument is correct with the [IF RUN NATIVELY]
> proviso, and so this can't be possible.
We could say that the Linz proof is correct on the basis of its terribly
incorrect basic assumptions or we cold say that the Linz proof is
fundamentally incorrect because its foundational basis is incorrect.
These are two different ways of saying the same thing.
>>
>> All of the cases where Was_Its_Execution_Aborted() returns true are
>> cases of non-halting behavior.
>>
>> All of the cases where Was_Its_Execution_Aborted() returns false are
>> cases of halting behavior.
>>
>
> Um, ok, that /sounds/ like you're saying it has characteristics (a) and
> (b) above? In which case although it may be answering your new
> question, IT WOULD AT THE SAME TIME BE CORRECTLY ANSWERING THE OLD
> QUESTION!
No because in the case where DebugTrace() decides to abort its input in
the prior language this would be a case where H() decides not halting
and then H_Hat() halts.
> ..And it can't be doing that, because then H_Hat could employ the "do
> the opposite of what H() says strategy, which I think you've agreed
> elsewhere works for the OLD question.
>
> Is the issue here that when you say "cases of non-halting behavior", you
> mean something other than "cases where P run with input I never halts
> [when run natively]"?
>
Not exactly.
Since the invocation of DebugTrace() by H_Hat() aborts H_Hat() we can't
really say that when it runs natively it never halts. We can say that
unless H_Hat() is aborted it would never halt.
> Thinking about it, your use of the term "non-halting *behavior*" seems a
> likely area of confusion!
>
> What exactly do you mean by "cases of non-halting behavior"?
The obvious one is infinite loop. Can you think of the other one?
> And just to be doubly clear, does this /mean/ the same as "program run
> /natively/ with given input never halts"? (I.e. in the usual sense of
> "non-halting TMs" in the literature and HP proof?)
>
If H_Hat() is run and never aborted it would never halt.
If it is executed with itself as input its invocation of DebugTrace()
would abort this input.
>>> It's almost as though you accept there is nothing wrong with it, and
>>> yet you still think its conclusion is incorrect! Or that you can't
>>> see anything wrong with it, and in your head the mistake in the proof
>>> is that its conclusion is wrong? (Thinking a conclusion is wrong does
>>> not refute anything...)
>>>
>>> Anyhow, you talk about the halt decider reporting that it "aborted its
>>> input program, because blah blah". If you read the Linz proof, you'll
>>> notice that it is completely unaffected of any internal reasoning as
>>> to WHY H might have made whatever decision it made. All it depends on
>>> is that H actually makes a decision!
>>>
>>
>> In the Linz case if a program would not halt and we are asking would it
>> halt and we abort the execution of H_Hat() then H() gets the wrong
>> answer because H() says that it would not halt and it does halt.
>>
>> If we keep everything else the same except change the question to:
>> Was the input program aborted because it would not otherwise terminate?
>>
>> Now when we answer yes we get the right answer. H_hat() cannot possibly
>> do the opposite of what H() decides because H_Hat() is under the
>> complete control of H().
>>
>
> ..but as explained above, H_Hat CAN have the behaviour that it halts if
> H() decides it was aborted, and it loops if H() decides it terminated.
As soon as H_Hat() is terminated and DebugTrace() returns a value the
H_Hat() process ceases to exist in memory because it was stored on the
DebugTrace() stack.
> (The H_Hat in your skeleton code is designed exactly this way.)
It is designed to precisely match the Linz templates.
> [... snip ...]
>>> So... this was to be the culmination of your life's work, and now
>>> you're simply not going to publish it? I thought the whole purpose of
>>
>> I didn't say that. As soon as people pay enough attention they will see
>> that I am correct.
>
> I fear this is one of your delusions! Your proof is almost nonexistent
My proof is very very concise yet infinitely more elborate than any
rebuttals of it.
Try and show how a non existent H_Hat() that no longer exists as a
process in memory can do anything at all and you will start to begin to
see that changing the halt deciding question converts an undecidable
problem into a decidable one.
> - stepping back a bit I can cast it as another version of your numerous
> attempts to refute various proofs by redefining key terms in the proof,
> then pointing out that the proof no longer works using those new terms.
> I don't believe /anyone/ has ever agreed with /any/ of those attempts,
> so I can't see them starting now.
>
That no one agrees with me is zero rebuttal at all.
> In the end you will be left with the choice of "proving them wrong" by
> publishing the code anyway (and I think you can see by now that will get
> you nowhere), or abandoning your life's work, having wasted 12,000 hours
> (your own reckoning) unnecessarily.
>
Take my challenge and show how the H_Hat() process that no longer exists
in memory can do anything at all that is the opposite of what
DebugTrace() decided.
> It's slightly interesting that 12,000 is exactly the figure Dudley
> quotes that one of his Trisectors spent on the trisection problem in his
> essay:
>
> <
http://web.mst.edu/~lmhall/WhatToDoWhenTrisectorComes.pdf>
>
> He remarks (of the trisector of course, not of you):
>
> "Twelve thousand working hours! Full time is forty hours a week for
> fifty weeks, so the poor deluded man had devoted the equivalent of six
> years of his life to something as useless as finding two even numbers
> whose sum is odd. What wouldn't you or I give for an extra six years of
> time? What couldn't we accomplish? What a deplorable waste!"
>
> In your case it must seem doubly wasteful, in that you could be exactly
> where you are now if you had simply published your high level design at
> the start of all this. (Well, I suppose then you wouldn't have your x86
> emulator program, so there's some compensation...)
>
> Mike.