From: Daryl McCullough on
Peter Olcott says...

>"Daryl McCullough" <stevendaryl3016(a)yahoo.com> wrote


>> You are assuming that there is a program
>> MalignantSelfReference(SourceCode, InputData)
>> which will return true if executing that
>> particular source code on that input data
>> results in a "malignant self reference".
>>
>> But then determining whether something involves
>> "malignant self reference" is, in fact,
>> equivalent to solving the halting problem.

>I am assuming nothing. I have shown step by step point by point,
>item by item, exactly and precisely how such a program could be
>constructed within the precise focus of this specific example.

What you have described is perhaps a way to detect *explicit*
self-reference. However, given any computer program, there are
infinitely many programs that do the exact same thing, but have
different source codes. It is not possible to detect that
two programs are, in fact, equivalent programs.

In light of that, consider your proposed solution.

You want to have a program willHalt(p,x) with three
possible outcomes:

(1) If program p halts on input x, then willHalt returns true.
(2) If program p does not halt on input x, then willHalt returns false.
(3) If program p makes a self-referential call on willHalt, then willHalt
throws an exception.

Okay, so now let Q(p,x) be some other program with two inputs.
Let F(x) be a program with the following behavior:

if Q(x,x) returns true, then loop forever,
if Q(x,x) returns false, then halt.

Now, let's run willHalt(F,F). How does willHalt decide whether
to throw a "MalignantSelfReferenceException"?

--
Daryl McCullough
Ithaca, NY

From: Daryl McCullough on
Peter Olcott says...

>>>int WillHalt(string SourceCode, string InputData) {
>>> if (MalignantSelfReference(SourceCode, InputData))
>>> throw(MALIGNANT_SELF_REFERENCE);
>>> if ( TheProgramWillHalt(SourceCode, InputData) )
>>> return TRUE;
>>> else
>>> return FALSE;
>>>}
>>
>> You are assuming that there is a program
>> MalignantSelfReference(SourceCode, InputData)
>> which will return true if executing that
>> particular source code on that input data
>> results in a "malignant self reference".

>I am assuming nothing.

Yes, you are. You are assuming that
MalignantSelfReference(SourceCode,InputData)
can detect whether there is a "malignant self
reference". There is no such program.

Once again, you have your program
WillHalt(string SourceCode, string InputData).

Now, let Q(p,x) be a function that has exactly
the same behavior as WillHalt, but completely
different source code. Let f(x) be the following
function

f(String x) {
if (Q(x,x)) {
loop();
}
}

Let #f be the source code for f, and consider the computation

WillHalt(#f,#f)

On what basis will WillHalt throw a Malignant Self Reference
Exception? Step through the computation of
MalignantSelfReference(#f,#f), and show how it decides
whether to return true or not.

--
Daryl McCullough
Ithaca, NY

From: Daryl McCullough on
Peter Olcott says...


>void LoopIfHalts(string SourceCode) {
> if ( WillHalt(SourceCode, SourceCode) == TRUE )
> while (TRUE) // loop forever
> ;
> else
> return;
>}
>
>
>int WillHalt(string SourceCode, string InputData) {
> if (MalignantSelfReference(SourceCode, InputData))
> throw(MALIGNANT_SELF_REFERENCE);
> if ( TheProgramWillHalt(SourceCode, InputData) )
> return TRUE;
> else
> return FALSE;
>}
>
>
>LoopIfHalts(LoopIfHalts);

The original statement of the halting problem doesn't
include "exceptions". Throwing an exception is just one
particular way of halting. However, if you want to say
that there are three possible results of running a program:
(1) The program halts, (2) the program runs forever, or (3)
the program throws an exception, then we can recast the
halting problem as follows:

There is no program throwsException(p,x) such that
(1) If the program whose source code is p, when run on input x
throws an exception, then throwsException returns true.
(2) If the program whose source code is p, when run on input x
never throws an exception, then throwsException returns false.

There is no program throwsException that works correctly on
all inputs.

--
Daryl McCullough
Ithaca, NY

From: sillybanter on
In comp.theory Peter Olcott <NoSpam(a)seescreen.com> wrote:

> So the equivalent of the return value of the Halt() function from
> the TM is the integer value that the TM's ReadWrite head rests on
> when the TM halts. In this case DOES_NOT_HALT=0 HALTS=1
> MALIGNANT_SELF_REFERENCE=2. This scenario breaks out of the infinite
> recursion of the original specification of the problem, and provides
> the only possible correct answer.

In the standard presentation of the halting problem, there is no
recursion, infinite or otherwise. Don't be confused by the fact that
the same name of a function is used in the analyzed program and in the
analyzer - it's not the same thing, and these two instances of
"Halt" are completely separate.

That can certainly be confusing, but if you don't understand that then
consider it like this: Take the putative Halt procedure and everywhere
you see "Halt" just replace that with the name "CopyOfHalt". Now you
have something completely equivalent, and you can call "CopyOfHalt" in
the "LoopIfHalts" function. There is no requirement in the halting
problem proof that CopyOfHalt be recursive (or that it not be
recursive for that matter). And CopyOfHalt certainly can't call
"LoopIfHalts" or the original "Halt" function, so there's no chance of
indirect recursion there either. So now we have something that
clearly doesn't have to be recursive in any shape or form, and yet the
proof of the halting problem still works out.

How does that affect your belief that somehow "infinite recursion" is
involved?

--

Steve Stringer
sillybanter(a)gmail.com

From: sillybanter on
In comp.theory Peter Olcott <NoSpam(a)seescreen.com> wrote:

> That seems to be a very precise English language statement that is
> most typically used to describe the results of the HP. It is this
> statement that I refute. I may be wrong, I have been wrong before,
> but, it is still this specific statement that I refute. The HP can
> be decided, yet the answer can not be restricted to YES or NO
> because the question is not a YES or NO question.

There are certainly problems that are ill-formed, but the halting
problem is not one of those. Deal with the real form of the halting
problem for a minute - don't try to change the model or anything. Now
consider the following statement:

Given a TM (or a program in any TM-equivalent language, if you
prefer) and an input, when the TM is run with the input it either
halts in a finite number of steps or it doesn't.

Do you somehow disagree with that? I'm not sure how you could - that
seems to partition the space of possibilities quite nicely. Either
something happens or it doesn't. Yes or no. Completely well formed.
*You* may not know for a particular program/input whether the answer
is yes or no, so you might want to add a third choice "I dont' know",
but that's a different question - and doesn't negate the fact that
there *is* a yes or a no answer.

--

Steve Stringer
sillybanter(a)gmail.com