From: Heelium on
You see:

Program():
1. Will run
2. Will call an DoIHalt(boolean), which knows, if the caller would
stop - meanwhile it won't continue running itself
3. Is an outside-world observer for another computer running the
program (using camera) or runs Server() to know that thing, in each
case halting only if it gets the signal of not halting

DoIHalt(boolean):
1. Will never return if there is a halting problem.
2. Will signal the value.

Server():
1. Will run Program() and detect if it sends no-halt signal.
2. Will return if it did.

Then, there is a helper method:
Proxy()
1. Will run the Program()
2. Will detect DoIHalt() value
3. Will display it on screen

And then, there is outside-world observer:
1. Will run the Server()
2. Will somehow react to the result

On Jun 24, 5:08 am, Tim Little <t...(a)little-possums.net> wrote:
> That's a big "if", since for the general case there is no algorithm
> that can do so.

We assume that it's a good style for a programmer to know that his
program can run, say, on 4GB of memory with given data. For example,
when I can not be sure that my image editor might not be able to edit
_some_ 1MB jpg image on my computer because of memory limit, I would
consider this undone work.

The halting problem we check after being otherwise sure that our
program _should_ work on given data.

> > If you are not able to find a formulae for maximum memory need, you
> > don't care if it theoretically exits (assuming that you already have
> > the computer powerful enough to check if it does).
>
> This makes no sense.
>
> - Tim

From: Heelium on
By the way, I could as well have defined that this is impossible to
say, how long it takes to solve the halting problem - we can not
define our DoIHalt to signal "I'm working" every four or eight
seconds, there is no such constant, but there is no reason, why it
shouldn't always return true or false in case the problem is solvable.

For example, let's hypothetically define:

In case the program would run longer than Universe has existed,
returning takes longer than one second.

On Jun 24, 7:40 am, Heelium <qtv...(a)gmail.com> wrote:
> You see:
>
> Program():
> 1. Will run
> 2. Will call an DoIHalt(boolean), which knows, if the caller would
> stop - meanwhile it won't continue running itself
> 3. Is an outside-world observer for another computer running the
> program (using camera) or runs Server() to know that thing, in each
> case halting only if it gets the signal of not halting
>
> DoIHalt(boolean):
> 1. Will never return if there is a halting problem.
> 2. Will signal the value.
>
> Server():
> 1. Will run Program() and detect if it sends no-halt signal.
> 2. Will return if it did.
>
> Then, there is a helper method:
> Proxy()
> 1. Will run the Program()
> 2. Will detect DoIHalt() value
> 3. Will display it on screen
>
> And then, there is outside-world observer:
> 1. Will run the Server()
> 2. Will somehow react to the result
>
> On Jun 24, 5:08 am, Tim Little <t...(a)little-possums.net> wrote:
>
> > That's a big "if", since for the general case there is no algorithm
> > that can do so.
>
> We assume that it's a good style for a programmer to know that his
> program can run, say, on 4GB of memory with given data. For example,
> when I can not be sure that my image editor might not be able to edit
> _some_ 1MB jpg image on my computer because of memory limit, I would
> consider this undone work.
>
> The halting problem we check after being otherwise sure that our
> program _should_ work on given data.
>
> > > If you are not able to find a formulae for maximum memory need, you
> > > don't care if it theoretically exits (assuming that you already have
> > > the computer powerful enough to check if it does).
>
> > This makes no sense.
>
> > - Tim

From: Heelium on
For me, there was actually a specific intuitive issue with halting
problem, which is retrospection now - it applies to myself. When
starting to do something, then I could find a task, for which I could
not say if I finish the task, however long time I had to think or try.
This is clear that when I could finish a task, I must eventually know
that I could. If I could not finish a task, then it is intuitively
reasonable to believe that after long and intelligent study I am able
to step one level up, to a metalevel, and say if I am or if I am not.
For example - am I able to solve the halting problem? It is clearly
mathematically unsolvable, but it is clearly counter-intuitive when
stated without explanation. But what is the most painful case - there
must be an answer to the problem if I am able to solve the halting
problem even in case it does not have a solution. At least, there must
be some specific class of cases, where it does not have a solution -
and this class must be defineable.

Now, to be unable to solve a task, a task must be more intelligent
than I am. Let's hypothesize that by trial and error, genetic
manipulations and evolution I can - or humankind can, indeed - raise
the intelligence indefinitely. Let's hypothesize that computer, also,
can. So there must be nothing I could not, eventually, solve as
solvable or unsolvable, as long as it is not infinitely complex. Thus,
why should there not be a case that even a halting problem can, in
some specific cases, be solved as unsolvable? And then, how could it,
in reaction, behave as solvable? It could not. Thus, there is no proof
in real world that halting problem has no general solution. In world
of computer programs, where everything must be determined, there might
be a different case - a program, which will finish in case it will
return unsolvable, thus it will be solvable instead. But if we have
this uncertainty in program's inside works, we could add an
"intelligence level" scale, where we can return "too intelligent"
instead of "halting problem". Anything too intelligent is unsolvable,
because it's too intelligent. Now the question becomes - could we
write a program, which is intelligent and able to learn, even in black
box? Then we can state that we do not know if intelligent learning has
an end-point or not; is there a definite theory or definite theories
(which make it stupid to continue learning) or not? But a program,
which is detected to be truly intelligent, has no way to not be truly
intelligent - even if it's main purpose is to detect it's intelligence
and become non-intelligent in case it has detected itself illimitedly
intelligent.

But what's the conclusion, then? In case it's impossible to definitely
detect true intelligence, it might still be possible to make
definitely clear if any program, which has it's borders, will stop
working. If it's, then, programmer's task to first make sure if her
program could be truly intelligent or not, then wait the results in
case of not, the problem could have a viable solution - any program
except true intelligence could be definitely measured as finishing or
not finishing by halting problem solver, which is as intelligent as
possible (and no problem itself could not be more intelligent, but it
could be as intelligent as the solver). But there is no logical
reason, why the solver could not detect if the application is as
intelligent as itself - or even more intelligent.

How to express this in C++? [which should be the problem]

The only way - let's suppose that we have a problem solver with
constantly growing intelligence. With every step of intelligence
growth, it can solve halting problems two times faster. For every
given problem it might give up and it's also unable to be sure if it
will eventually find the final solution - or, by proof, it knows that
it does not. But it does not prove that programmer can not write the
"seed program" at once.
From: Heelium on
I did seek further if there is some humanly wording to this logical
game.

Thus, if it's so:

DoesHalt() is a function called by program to check if it reaches a
given execution point, which will halt if the result is ambivalent.

This produces a pattern:

However we call DoesHalt() in program code, it will halt in case the
correct result depends on it.

As far as I have checked it - and the possibilities are numerous - I
get the following odd pattern:

1. If not DoesHalt(), goto 3
2. If DoesHalt(), loop forever; otherwise halt
3. Print "Forever loop"

Now, as DoesHalt will halt if there is ambivalence:

DoesHalt() on line 2 will produce forever loop inside DoesHalt()
function. This makes the behaviour of it consistent.

DoesHalt() on line 1, anyway, has a logical possibility to now assume
that line 2 will not halt, thus jump to 3.

Now, in such formal sight to things - is this somehow possible that
the loop at 2 could actually be detected only inside same computer
(because when you try to do thing on line 1. from another computer,
watching the output, you will not be sure in things) and that an
application checking the case must have metalevel access to the whole
picture - because you can not make any conclusion on line 2., where
you do not see both halting check function and the tricky code?

This looks like ...make even too much sense :P Like formally saying
that DoesHalt() must have access to it's own code instance to be sure.
From: Paul E. Black on
On Wednesday 23 June 2010 21:24, Joshua Cranmer wrote:
> On 06/23/2010 09:01 PM, Heelium wrote:
>> If you are not able to find a formulae for maximum memory need, you
>> don't care if it theoretically exits (assuming that you already have
>> the computer powerful enough to check if it does).
>
> [[PEB]] Bounding the
> maximum memory on real-world programs would likely be insanely
> difficult, and I suspect that it is equivalent to the halting problem in
> difficulty.

Consider the Collatz conjecture: if the number is even, half it. If
the number is odd, multiply by 3 and add 1.
http://en.wikipedia.org/wiki/Collatz_conjecture
Since we don't know if every sequence is bounded (and big numbers take
a lot of memory to represent), we can't predict the maximum memory for
computing the hailstone sequence starting from a number. That is,
M(n)
where M() is the number of bits needed to compute the hailstone
sequence starting with n.

M(1) = 1
M(2) = 2
M(3) = 4 (max is 10)
M(4) = 3
M(5) = 4 (max is 16)
M(6) = 4 (max is 10)
M(7) = 5 (max is 52)
M(8) = 3
M(9) = 5 (max is 52)
M(10) = 4
M(11) = 5 (max is 52)
M(12) = 4
M(13) = 5 (max is 40)
M(14) = 5 (max is 52)

-paul-
--
Paul E. Black (p.black(a)acm.org)