Monday, October 26, 2020

Digest for comp.lang.c++@googlegroups.com - 12 updates in 3 topics

olcott <NoOne@NoWhere.com>: Oct 26 02:12PM -0500

On 10/26/2020 11:11 AM, Mike Terry wrote:
> detects non-halting behaviour and returns ABORTS to H() and H_Hat().  Is
> that my false assumption?
 
> Mike.
 
 
void H_Hat(u32 M)
{
if (Aborted_Because_Non_Halting_Behavior_Detected(M, M))
MOV_EAX_1 // Execution of M(M) has been aborted
else
{
MOV_EAX_0 // M(M) has halted
HERE: goto HERE;
}
HALT
}
 
 
void H(u32 M, u32 N)
{
if (Aborted_Because_Non_Halting_Behavior_Detected(M, M))
MOV_EAX_1 // Execution of M(N) has been aborted
else
MOV_EAX_0 // M(N) has halted
HALT
}
 
 
int main()
{
u32 M = (u32)H_Hat;
H(M, M);
H_Hat(M);
HALT
}
 
In each of the two cases above:
Aborted_Because_Non_Halting_Behavior_Detected(H_Hat, H_Hat)
Does provide the correct decision for its input.
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 02:46PM -0500

On 10/26/2020 2:28 PM, Alan Mackenzie wrote:
 
> Why are you being so damned evasive and dishonest? My question was not
> about comparing H_Hat with H. It was about comparing your A_B_N_H_B_D
> with a putative halt decider. They both give the same results.
 
 
void H_Hat(u32 M)
{
if (!Halts(M, M))
MOV_EAX_0 // Does not Halt
else
{
MOV_EAX_1 // Halts
HERE: goto HERE;
}
HALT
}
 
 
void H(u32 M, u32 N)
{
if (!Halts(M, M))
MOV_EAX_0 // Does not Halt
else
MOV_EAX_1 // Halts
HALT
}
 
int main()
{
u32 M = (u32)H_Hat;
H(M, M);
HALT
}
 
 
OK then: Let me know which of (a) or (b) is correct and explain why it
is correct:
 
(a) H.MOV_EAX_0 // in Linz it is a transition to a final state of ((qn))
(b) H.MOV_EAX_1 // in Linz it is a transition to a final state of ((qy))
 
 
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 02:53PM -0500

On 10/26/2020 2:38 PM, Mike Terry wrote:
>> Does provide the correct decision for its input.
 
> So what was my false assumption you were referring to?
> Mike.
 
This answer may be too difficult to understand without an actual
execution trace of fully operational code. I have already explained it
again and again and no one has understood.
 
The key summation of all of these execution trace answers is that
bool Aborted_Because_Non_Halting_Behavior_Detected(M, M)
always decides its input correctly and cannot be shown otherwise.
 
The prior reply to you is much much easier to understand and is a key
test of your sincerity in forming mutual understanding.
 
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 03:43PM -0500

On 10/26/2020 2:46 PM, olcott wrote:
 
> (a) H.MOV_EAX_0 // in Linz it is a transition to a final state of ((qn))
> (b) H.MOV_EAX_1 // in Linz it is a transition to a final state of ((qy))
 
> Copyright 2020 Pete Olcott
 
This answer may be too difficult to understand without an actual
execution trace of fully operational code. I have already explained it
again and again and no one has understood.
 
The key summation of all of these execution trace answers is that
bool Aborted_Because_Non_Halting_Behavior_Detected(M, M)
always decides its input correctly and cannot be shown otherwise.
 
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 04:01PM -0500

On 10/26/2020 3:50 PM, Malcolm McLean wrote:
> else
> printf("Not aborted\n");
> }
 
You have only shown how to encode this function incorrectly:
bool Aborted_Because_Non_Halting_Behavior_Detected(u32 P, u32 I)
 
You have not shown any input where the following design necessarily gets
the wrong answer:
 
The redefined halt decider UTM executes its subordinate UTM one state
transition at a time until it detects non-halting behavior or its
subordinate UTM has terminated normally.
 
If the halt decider UTM detects non-halting behavior of its subordinate
UTM it simply stops executing the subordinate and transitions to its own
final state of ABORTED_NON_TERMINATING_BEHAVIOR.
 
If the subordinate UTM terminates normally the halt decider UTM
transitions to its own final state of SUBORDINATE_HAS_TERMINATED.
 
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 04:27PM -0500

On 10/26/2020 4:07 PM, Alan Mackenzie wrote:
>> again and no one has understood.
 
> That suggests that your explanation is poor, or that you fail yourself to
> understand what you're trying to explain.
 
Tracing hundreds of steps of recursive invocation cannot not be
explained in any simple way. I have given the answer many times.
It is (apparently) too difficult to understand without an actual
execution trace.
 
>> bool Aborted_Because_Non_Halting_Behavior_Detected(M, M)
>> always decides its input correctly and cannot be shown otherwise.
 
> It does not, and it has been shown otherwise.
 
I am not saying the code always gets the right answer to do this I have
to provide an infinite proof.
 
I am saying that unlike the conventional self-referential halting
problem proofs no counter-example can be provided that shows that it
necessarily gets the wrong answer.
 
If you really think that I must be wrong then try and find such a
counter-example proving that I am wrong. As soon as you find out that
this is logically impossible it might begin to occur to you that I might
be right.
 
> Your problem is that you do not understand the maths, that you refuse to
> understand the maths, and that you do not take advice and help from
> people who do understand it.
 
It is not about the math. It is about the computer science.
 
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 04:31PM -0500

On 10/26/2020 4:08 PM, Malcolm McLean wrote:
>> You have not shown any input where the following design necessarily gets
>> the wrong answer:
 
> I'm not disagreeing with you. I'm trying to clarify what you say.
 
Great!
 
Please try and find a counter-example where a halt decider defined as
follows would necessarily fail, or agree that the conventional halting
problem proof trick no longer works on such a halt decider:
 
The redefined halt decider UTM executes its subordinate UTM one state
transition at a time until it detects non-halting behavior or its
subordinate UTM has terminated normally.
 
If the halt decider UTM detects non-halting behavior of its subordinate
UTM it simply stops executing the subordinate and transitions to its own
final state of ABORTED_NON_TERMINATING_BEHAVIOR.
 
If the subordinate UTM terminates normally the halt decider UTM
transitions to its own final state of SUBORDINATE_HAS_TERMINATED.
 
 
 
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 04:35PM -0500

On 10/26/2020 4:26 PM, Keith Thompson wrote:
> "function", and what that definition is -- especially when C code is
> begin discussed. Readers of comp.theory might not be familiar with the
> way you use words.
 
Upon a suggestion of another poster we can hypothetically assume that
the x86utm language does not provide any user code access to global
data. This change would seem to make what Malcolm said true.
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 04:57PM -0500

On 10/26/2020 4:07 PM, Alan Mackenzie wrote:
>> bool Aborted_Because_Non_Halting_Behavior_Detected(M, M)
>> always decides its input correctly and cannot be shown otherwise.
 
> It does not, and it has been shown otherwise.
 
If you were paying very close enough attention rather than merely
glancing at a few words here and there under the presumption that I must
be incorrect you would notice that none of the examples ever showed a
single case where:
 
bool Aborted_Because_Non_Halting_Behavior_Detected(u32 M, u32 N)
ever returned an incorrect value for its input.
 
When there are two or three simultaneous instances of H_Hat and two
different instances of the halt decider each one being executed in its
own process context it may be a little difficult to see which halt
decider makes the decision and which H_Hat is the input basis for its
decision.
 
A full execution trace will solve this problem.
 
 
--
Copyright 2020 Pete Olcott
Mike Terry <news.dead.person.stones@darjeeling.plus.com>: Oct 26 07:25PM

On 26/10/2020 17:36, olcott wrote:
 
>> So for starters you need to define:
 
>> 1) The program spec for
>> Aborted_Because_Non_Halting_Behavior_Detected(u32 P, u32 I)
 
??
 
 
> To the question:
> Does H_Hat halt on it input H_Hat?
> Both Yes and No are the wrong final state to transition to.
 
None of that explains what you mean by "impossible to decide correctly"
in the context of your challenge, or even make sense in the context of
the HP...
 
For GIVEN (/FIXED/) programs H and H_Hat, the calculation H_Hat(H_Hat)
either halts or never halts, right? Exactly one of those possibilities
is correct. So there IS a perfectly correct answer to the question
"Does H_Hat(H_Hat) halt?".
 
A halt decider "decides correctly" if it halts in the corresponding halt
decider state (Yes [HALTS or NONHALTS[halts] or q_n [doesn't halt]).
 
So in fact, one of the Yes and No IS the right final state to transition
to! The fact is simply H is one of those putative halt deciders that
transitions to the WRONG state.
 
 
Let's make this clearer. For YOUR ACTUAL (soon to be delivered) H and
H_Hat, which of these is the case?
 
a) H_Hat(H_Hat) halts
b) H_Hat(H_Hat) never halts
 
> shortly. Since I have worked on this about 80 hours per weeks for six
> months I have reduced my coding time to less than 40 hours per week for
> this home stretch.
 
OK, so you must at least know the answer to my (a) (b) question above,
right?
 
 
>> quite restrictive guidelines for line lengths. I'm all for suggestive
>> function names, but we need to be practical! What about ABNHBD()?
 
> No, Not all. Not in the least little bit.
Repeating this clumsy phrase makes you look goofy.
> The name must be utterly self-descriptive to eliminate any confusion
 
Well, I'm not going to keep on typing all that, so I'll use ABNHBD, and
you'll know what I mean.
 
The right way to eliminate confusion is for you to give the
specification for the routine, which you've not done yet. The long name
fails as a spec!
 
>> Aborted_Because_Non_Halting_Behavior_Detected(u32 P, u32 I) gives a
>> response that doesn't meet it's spec."
 
> Yes
 
You're saying this is the correct answer to my question (2)?
 
Then you should have said this in response to the question, whereas what
you actually answered was a long description of two programs, with an
incorrect statement about "wrong states".
 
So... now you need to give that spec!
 
> and I show an overview of the architecture of the halting algorithm
> as it would be applied to a UTM halt decider deciding the halting of its
> subordinate UTM below:
[... snip ...]
 
I never asked about this, and you've said all this elsewhere.
 
Regards,
Mike.
olcott <NoOne@NoWhere.com>: Oct 26 02:43PM -0500

On 10/26/2020 2:25 PM, Mike Terry wrote:
 
> None of that explains what you mean by "impossible to decide correctly"
> in the context of your challenge, or even make sense in the context of
> the HP...
So in other words it is far too difficult for you to understand that:
(a) H.MOV_EAX_0 // in Linz it is a transition to a final state of ((qn))
(b) H.MOV_EAX_1 // in Linz it is a transition to a final state of ((qy))
are both the wrong answer.
 
If you can't acknowledge this you may have to be written off as not
actually interested in achieving a mutual understanding.
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 26 02:05PM -0500

On 10/26/2020 1:12 PM, André G. Isaak wrote:
 
> H_Hat doesn't specify any sort of recursion, so I don't know why you
> keep claiming that. Even in an implementation where your H actually
> 'executes' H_Hat in some sort of modified environment, it is not recursive.
 
When Aborted_Because_Non_Halting_Behavior_Detected(H_Hat, H_Hat)
is executed in the x86utm process context it creates a new process
context and executes H_Hat() in DebugStep() mode within this new H_Hat()
process context.
 
This DebugStep() mode reaches
Aborted_Because_Non_Halting_Behavior_Detected(H_Hat, H_Hat)
in _Hat() and creates another process context in the _Hat() process
context.
 
Aborted_Because_Non_Halting_Behavior_Detected(H_Hat, H_Hat)
executes this other instance of H_Hat() in the process context of the
prior H_Hat(). As soon as it reaches
Aborted_Because_Non_Halting_Behavior_Detected(H_Hat, H_Hat)
in the second H_Hat() instance the outer
Aborted_Because_Non_Halting_Behavior_Detected(H_Hat, H_Hat)
that has been watching all of the execution steps in all of the process
contexts sees that H_Hat() is invoking
Aborted_Because_Non_Halting_Behavior_Detected(H_Hat, H_Hat)
from the same machine address a second time without encountering any
conditional branch instructions in H_Hat() that would terminate its
otherwise infinite recursion. At this point
Aborted_Because_Non_Halting_Behavior_Detected(H_Hat, H_Hat)
stops executing the first instance of H_Hat() (which also stops
everything else in this process tree) and returns TRUE.
 
> itself, it is calling a separate function within H_Hat that just happens
> to be identical to the one in H (similarly, the inner H_Hat has its own,
> separate, copy of Aborted_Because_Non_Halting_Behavior_Detected)
 
 
On 10/23/2020 5:51 PM, Mike Terry wrote:
> int H_Hat(u32 M)
> {
> if (Was_Its_Execution_Aborted(M, M))
 
The above simplified H_Hat() provided by Mike has been applied to the
Peter Linz H_Hat() to make it conform to the model of the conventional
self-referential halting problem counter-examples:
 
void H_Hat(u32 M)
{
if (!Halts(M, M))
MOV_EAX_0 // Input Loops
else
{
MOV_EAX_1 // Input Halts
HERE: goto HERE;
}
HALT
}
 
 
> tape configuration about which it answers the question 'will this halt'?
> There's nothing in that requiring that anything 'calls' anything,
> recursively or otherwise.
 
As you continue to keep ignoring I show how a halt decider can be
defined that avoids the conventional halting problem trick.
 
That Peter Linz showed one way that a halt decider will not always work
does not show that the halting problem is undecidable.
 
> is not identical to the one in H, then you aren't constructing the
> proper relation between H and H_Hat.
 
> André
 
When-so-ever it detects non-halting behavior the halt decider UTM stops
executing its subordinate UTM in one state transition at a time mode and
transitions to its own final state of: ABORTED_NON_TERMINATING_BEHAVIOR.
 
 
--
Copyright 2020 Pete Olcott
You received this digest because you're subscribed to updates for this group. You can change your settings on the group membership page.
To unsubscribe from this group and stop receiving emails from it send an email to comp.lang.c+++unsubscribe@googlegroups.com.

No comments: