Thursday, October 22, 2020

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

olcott <NoOne@NoWhere.com>: Oct 21 06:28PM -0500

On 10/21/2020 6:16 PM, Ben Bacarisse wrote:
>> pathological self-reference.
 
> Now that your method has been revealed, please post what you had two
> years ago.
 
I am going beyond that. What I had two years ago was far too terse for
anyone here to understand. Now that the man-years worth of work creating
the x86utm operating system is totally complete I can write much more
robust halt deciding code.
 
If you can't see how I have already refuted the halting problem proofs
by transforming the halting question:
(a) Does H_Hat() halt on its input?
 
Into an equivalent question that is not subject to pathological
self-reference:
 
(b) Does the execution of H_Hat() have to be aborted to prevent the halt
decider from getting stuck in infinite execution?
 
Then it makes no sense to provide the halt decider code.
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 21 09:14PM -0500

On 10/21/2020 8:22 PM, Richard Damon wrote:
> clearly a legal modification, so any problems with it must have been
> contained in H, so saying H can't exist is exactly what Linz was trying
> to prove.
 
When we make the single change that I suggest the halting problem ceases
to be impossible to solve because this revised question is not subject
to pathological self-reference.
 
All of the inputs are divided into halting and not halting and the halt
decider cannot be fooled by a program based on itself that does the
opposite of whatever it decides.
 
--
Copyright 2020 Pete Olcott
Mike Terry <news.dead.person.stones@darjeeling.plus.com>: Oct 22 03:38AM +0100

On 21/10/2020 23:55, olcott wrote:
> pathological self-reference into a question that is not subject to
> pathological self-reference thus eliminating the impossibility of
> solving the halting problem.
 
You forgot to answer the question! Here it is again:
 
Will both the DebugTrace() return codes be ZERO, or will they be
NON-ZERO? (You previously agreed they would be the same...)
 
Mike.
 
olcott <NoOne@NoWhere.com>: Oct 21 09:54PM -0500

On 10/21/2020 9:38 PM, Mike Terry wrote:
 
> Will both the DebugTrace() return codes be ZERO, or will they be
> NON-ZERO?   (You previously agreed they would be the same...)
 
> Mike.
 
That question will only be answered by fully operational code.
 
The key proof has already been provided. No matter what return value
that DebugTrace() provides if it is always answering the question:
 
Was your input aborted because it would not otherwise halt?
The halting problem becomes decidable.
 
 
--
Copyright 2020 Pete Olcott
Mike Terry <news.dead.person.stones@darjeeling.plus.com>: Oct 22 04:38AM +0100

On 22/10/2020 03:54, olcott wrote:
>> NON-ZERO? (You previously agreed they would be the same...)
 
>> Mike.
 
> That question will only be answered by fully operational code.
 
That's what I expected you to say. It won't make the slightest
difference to how your work is received if you answer now or in a few
weeks, but it's your choice.
 
> The key proof has already been provided.
 
?!
 
All you've provided so far is: a) the skeleton C code, which clearly is
going to support the Linz proof, if what you've said about how
DebugTrace() behaves is true; and b) what you've said below about
changing the question, which makes no difference to anything at all.
 
Have I missed an actual proof of something? The Usenet server I use
(Giganews) does that from time to time - it has a bug in its "add new
message to database" logic where certain updates are not atomic (w.r.t
client enquiries) when they should be.
 
(Or is your "changing the question" supposed to be some kind of proof?)
 
> that DebugTrace() provides if it is always answering the question:
 
> Was your input aborted because it would not otherwise halt?
> The halting problem becomes decidable.
 
Sorry, but that's nonsense. Oh well, guess we'll just have to wait and
see the full code.
 
Mike.
olcott <NoOne@NoWhere.com>: Oct 21 11:33PM -0500

On 10/21/2020 10:38 PM, Mike Terry wrote:
> going to support the Linz proof, if what you've said about how
> DebugTrace() behaves is true; and b) what you've said below about
> changing the question, which makes no difference to anything at all.
 
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.
 
> message to database" logic where certain updates are not atomic (w.r.t
> client enquiries) when they should be.
 
> (Or is your "changing the question" supposed to be some kind of proof?)
 
By changing the question H_Hat() can no longer do the opposite of what
H() decides making an undecidable problem into a decidable problem.
 
 
> Sorry, but that's nonsense.  Oh well, guess we'll just have to wait and
> see the full code.
 
> Mike.
 
The full code will not be provided until you (and others) understand how
I already proved my point.
 
By searching the comp.theory forum for "olcott" (11,415 messages from
me) it can be verified that it took me about 12,000 hours since 2004 to
come up with this simple "change the question" refutation.
 
In the mean time I will complete the code that uses a key detail about
the halting problem that no one ever noticed for 80 years to correctly
decide the halting of H_Hat().
 
I already showed THAT the halting problem is decidable.
 
Next I will show HOW the conventional self-referential halting problem
counter examples are decided.
 
 
 
--
Copyright 2020 Pete Olcott
Richard Damon <Richard@Damon-Family.org>: Oct 22 08:00AM -0400

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.
 
One possible counter might be showing that the steps that Linz did to
make H_Hat aren't allowed by the definition of Turning Machines, but
they clearly are, being a fairly simple augmentation to the state table
of H.
 
Showing that some thing you call "H_Hat" doesn't contradict something
you call "H", which doesn't do what H is required to do proves
absolutely nothing. At best it provides some evidence that the creation
of a universal halt detector is in fact impossible, because you are
going to such off-beat arguments that it is possible.
olcott <NoOne@NoWhere.com>: Oct 22 09:36AM -0500

On 10/22/2020 7:00 AM, Richard Damon wrote:
>> 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.
 
 
--
Copyright 2020 Pete Olcott
Mike Terry <news.dead.person.stones@darjeeling.plus.com>: Oct 22 04:25PM +0100

On 22/10/2020 15:36, olcott wrote:
> 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. 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 your example, as long as H actually makes /some/ decision, the H_Hat
will do the opposite of what H decided, and so the Linz proof will be
confirmed, not refuted. If H loops, never making any decision, then H
is not a decider for the H_Hat(H_Hat) question (contrary to what you
have always explicitly stated) and so is irrelevant to the Linz proof.
 
You have said you won't reveal your final code unless I (and others)
agree that what you've said so far already proves your point. Well, you
haven't proved anything, so that's that.
 
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
producing the actual TMs was that it would override any objections
people raised to a mere verbal claim, and prove you right despite the
objections?
 
Two years ago I told you that if you just gave your reasoning and
perhaps some high-level pseudo-code, and forgot about producing actual
"TM"s and traces and whatnot, people would quickly tell you your mistake
and you could save months of effort. And it turns out (no surprise)
that this was correct! Had you posted 2 years ago just what you've said
in this thread people would have said exactly the same as they're saying
now, and nothing whatsoever would be different, except you would have
saved a year's work on your part. :)
 
Regards,
Mike.
olcott <NoOne@NoWhere.com>: Oct 22 10:44AM -0500

On 10/22/2020 9:57 AM, Ben Bacarisse wrote:
> have a pair, H and H^, related exactly as in Linz, where H gives the
> correct halting answer for H(H^, H^). Do you now see that such a pair
> is impossible?
 
I think that the problem is that you are not even glancing at what I say
before you form your baseless rebuttal.
 
I have already proven that the H() to H_Hat() relationship is the same
as the conventional self-referential halting problem counter-example
relationship by providing its exact source code.
 
I adapted Mike's version of H_Hat(),
His comments regarding the halting decision were incorrect.
 
On 10/20/2020 8:57 PM, Mike Terry wrote:
> for (;;); // ..so we loop
> }
> }
 
 
// M has address of H_Hat()
int H_Hat(u32 M)
{
int Abort = DebugTrace(M, M);
if (Abort)
{
MOV_EAX_0 // DebugTrace says that M(M)
HALT // has been aborted
}
else
{
MOV_EAX_1 // M(M) has halted
HERE: goto HERE;
HALT
}
}
 
 
The much more subtle nuance that cannot be understood by anyone that is
not an expert in this field and only then with very intense focused
concentration is that my simple change to the halting question converts
the halting problem from an undecidable problem into a decidable problem.
 
Did the input program have to be aborted to prevent the halt decider
from getting stuck in infinite execution?
 
Cannot be thwarted by pathological self-reference.
 
It is no longer impossible for a halt decider to divide all of its
inputs into (a) halting and (b) would not otherwise halt.
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 22 11:38AM -0500

On 10/22/2020 10:25 AM, Mike Terry wrote:
>> 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.
 
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.
 
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.
 
> 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().
 
> In your example, as long as H actually makes /some/ decision, the H_Hat
> will do the opposite of what H decided, and so the Linz proof will be
 
No not at all, not in the least little bit, as exaplained above.
 
> confirmed, not refuted.  If H loops, never making any decision, then H
 
That violates the defintion of a halt decider.
 
 
> You have said you won't reveal your final code unless I (and others)
> agree that what you've said so far already proves your point.  Well, you
> haven't proved anything, so that's that.
 
I took me 12,000 hours to derive this simple little proof so it is OK if
you don't get it right away.
 
> 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.
 
> producing the actual TMs was that it would override any objections
> people raised to a mere verbal claim, and prove you right despite the
> objections?
 
The "objections" are merely not paying enough attention to understand
what I am saying.
 
 
--
Copyright 2020 Pete Olcott
Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk>: Oct 22 05:41PM +0100

On 20/10/2020 22:26, Chris M. Thomasson wrote:
>> DebugTrace() continues a DebugStep() of M(N) unless M(N) would not otherwise terminate.
 
>> At the first point that DebugTrace() determines that M(N) would not otherwise terminate it aborts the DebugStep() of M(N).
 
> How does it determine that an unknown function will never terminate?
 
Excellent question; in fact it is the ONLY question that matters .. we await Olcott's answer... ;D
 
/Flibble
 
--
¬
Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk>: Oct 22 05:54PM +0100

On 20/10/2020 17:33, olcott wrote:
> x86utm is as much as possible a Universal Turing Machine UTM that has the x86 language as its Turing Machine Description language.
 
Occam's Razor suggests that my assumption that Turing is correct and you, random Usenet person, are incorrect is a fair assumption so I don't have the time to read your refutation. If your "solution" to the HP is an "oracle" then:
 
"A machine with an oracle for the halting problem can determine whether particular Turing machines will halt on particular inputs, but they cannot determine, in general, if machines equivalent to themselves will halt."
 
/Flibble
 
--
¬
olcott <NoOne@NoWhere.com>: Oct 22 11:57AM -0500

On 10/22/2020 11:54 AM, Mr Flibble wrote:
>> x86utm is as much as possible a Universal Turing Machine UTM that has
>> the x86 language as its Turing Machine Description language.
 
> Occam's Razor suggests that my assumption that Turing is correct and
 
Perhaps you are totally unaware that Occam's Razor is merely a heuristic
used to save time and money and no aspect what-so-ever of correct
reasoning.
 
 
--
Copyright 2020 Pete Olcott
Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk>: Oct 22 06:05PM +0100

On 22/10/2020 17:57, olcott wrote:
>>> x86utm is as much as possible a Universal Turing Machine UTM that has the x86 language as its Turing Machine Description language.
 
>> Occam's Razor suggests that my assumption that Turing is correct and
 
> Perhaps you are totally unaware that Occam's Razor is merely a heuristic used to save time and money and no aspect what-so-ever of correct reasoning.
 
Yes I am aware that it a heuristic which I can use to decide on what I spend my time doing or thinking about. Life is fucking finite and time is fucking precious, mate, and there is no fucking afterlife. Stop wasting our time.
 
/Flibble
 
--
¬
olcott <NoOne@NoWhere.com>: Oct 22 12:09PM -0500

On 10/22/2020 11:56 AM, Malcolm McLean wrote:
> the paradox goes away.
 
> I'll leave it to others to explain why this only seems to refute the LInz
> proof that halting is undecideable.
 
It refutes the general assertion that the halting problem is undecidable
by showing how the halting question can be transformed into an
equivalent question that cannot be thwarted by pathological self-reference.
 
So within Linz's faulty assumption that the only possible way to create
a universal halt decider is to directly ask the question:
Does the input program halt on its input?
The Linz proof is correct.
 
When we realize that this assumption is faulty and instead ask the
question: Was the execution of the input program on its input aborted?
 
Then creating a universal halt decider is no longer "proved" to be
impossible on the basis of the conventional self-referential halting
problem counter-examples.
 
The halt decider either detects non-halting behavior and reports it or
allows the input program to terminate on its own.
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 22 12:19PM -0500

On 10/22/2020 11:41 AM, Mr Flibble wrote:
 
> Excellent question; in fact it is the ONLY question that matters .. we
> await Olcott's answer... ;D
 
> /Flibble
 
The only question that matters more than any other question is whether
or not changing the question from:
(a) Does the program halt on its input?
(b) Was the program aborted because non-halting behavior was detected?
 
eliminates the undecidability of all of the conventional
self-referential halting problem proof counter-examples?
 
How the halt decider actually decides these conventional
self-referential halting problem proof counter-examples is icing on the
cake because its basis is a crucial detail about the halting problem
counter-examples that no one (besides me) ever noticed for 80 years.
 
 
--
Copyright 2020 Pete Olcott
Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk>: Oct 22 06:21PM +0100

On 22/10/2020 18:19, olcott wrote:
> (b) Was the program aborted because non-halting behavior was detected?
 
> eliminates the undecidability of all of the conventional self-referential halting problem proof counter-examples?
 
> How the halt decider actually decides these conventional self-referential halting problem proof counter-examples is icing on the cake because its basis is a crucial detail about the halting problem counter-examples that no one (besides me) ever noticed for 80 years.
 
hubris
/ˈhjuːbrɪs/
 
noun
 
excessive pride or self-confidence.
 
"the self-assured hubris among economists was shaken in the late 1980s"
 
Similar:
arrogance
conceit
conceitedness
haughtiness
pride
vanity
self-importance
self-conceit
pomposity
superciliousness
feeling of superiority
hauteur
uppitiness
big-headedness
 
Opposite:
modesty
(in Greek tragedy) excessive pride towards or defiance of the gods, leading to nemesis.
 
/Flibble
 
--
¬
olcott <NoOne@NoWhere.com>: Oct 22 12:26PM -0500

On 10/22/2020 11:57 AM, Mike Terry wrote:
> "H can not give the correct halting answer for the input pair <[H^],
> [H^]>" is a /conclusion/ within the proof, based on a contradiction
> generated in turn by the previous state transition diagrams.
 
Within Linz's faulty assumption that the only possible way to create a
universal halt decider is to directly ask the question:
Does the input program halt on its input?
The Linz proof is correct.
 
When we realize that this assumption is faulty and instead ask the
question: Was the execution of the input program on its input aborted
because non halting behavior was detected?
 
Then creating a universal halt decider is no longer "proved" to be
impossible on the basis of the conventional self-referential halting
problem counter-examples.
 
The halt decider either detects non-halting behavior and reports it or
allows the input program to terminate on its own.
 
 
--
Copyright 2020 Pete Olcott
olcott <NoOne@NoWhere.com>: Oct 22 12:27PM -0500

On 10/22/2020 12:21 PM, Mr Flibble wrote:
>> years.
 
> hubris
> /ˈhjuːbrɪs/
 
Ad hominem attacks are the first resort of clueless wonders.
 
 
--
Copyright 2020 Pete Olcott
Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk>: Oct 22 06:30PM +0100

On 22/10/2020 18:27, olcott wrote:
 
>> hubris
>> /ˈhjuːbrɪs/
 
> Ad hominem attacks are the first resort of clueless wonders.
 
And you still haven't answered the question: how does it "detect" that the unknown function never terminates, clueless WANKER?
 
/Flibble
 
--
¬
Ralf Fassel <ralfixx@gmx.de>: Oct 22 06:05PM +0200

I am canceling my own article.
Frederick Gotham <cauldwell.thomas@gmail.com>: Oct 22 03:48AM -0700

I have an idea for making a 'fat binary' that doesn't require any kernel
support on Linux or Mac.
 
So let's say we start off with a small shell script like this:
 
#!/bin/sh
 
arch=`uname -m`
 
if [ $arch = "x86_64" ] ; then
// Do something
elif [ $arch = "aarch64" ] ; then
// Do something
fi
 
exit 0
 
The most important line is the last one "exit 0" because it will stop
the script. It is after this line that I will put the x86_64 binary,
followed by the aarch64 binary, so the script will look something like
this:
 
#!/bin/sh
 
arch=`uname -m`
 
if [ $arch = "x86_64" ] ; then
skip=00290
count=08816
elif [ $arch = "aarch64" ] ; then
skip=09106
count=14688
else
exit 1
fi
 
dd if="$0" of=/tmp/binaryfile bs=1 skip=${skip} count=${count} > /dev/null 2>&1
 
chmod +x /tmp/binaryfile
/tmp/binaryfile
 
exit 0
[ - - - x86_64 binary goes here - - - ]
[ - - - aarch64 binary goes here - - - ]
 
So as a test program to try it out, I'll now write a small C++ program
that prints a number sequence:
 
#include <iostream> /* cout, endl */
#include <thread> /* this_thread::sleep_for */
#include <chrono> /* seconds */
 
auto main(void) -> int
{
for ( unsigned i = 0; /* ever */ ; ++i )
{
std::this_thread::sleep_for(std::chrono::seconds(1u));
std::cout << i << std::endl;
}
}
 
I have compiled this program for two architectures:
 
g++ main.cpp -DNDEBUG -Os -o prog_x86_64
aarch64-linux-gnu-g++ main.cpp -DNDEBUG -Os -o prog_aarch64
 
and so I have two binaries as follows:
 
-rwxr-xr-x 1 root root 8816 Oct 22 10:53 prog_x86_64
-rwxr-xr-x 1 root root 14688 Oct 22 10:52 prog_aarch64
 
The x86_64 binary is 8816 bytes.
The aarch64 binary is 14688 bytes.
 
So now I get the size of my small script above:
 
-rwxr-xr-x 1 root root 290 Oct 22 11:31 myscript.sh
 
It is 290 bytes, which means I know how much to skip by:
 
dd if="$0" of=/tmp/binaryfile bs=1 skip=00290 count=08816
 
Finally I concatenate the 3 files:
 
cat myscript.sh prog_x86_64 prog_aarch64 > fatbin

And I run my fat binary:
 
chmod +x fatbin
./fatbin

I've tried this 'fatbin' file on both architectures and it works. You
can download the files here and try it yourself:
 
http://virjacode.com/experimental/prog.cpp
http://virjacode.com/experimental/prog_aarch64
http://virjacode.com/experimental/prog_x86_64
http://virjacode.com/experimental/myscript.sh
http://virjacode.com/experimental/fatbin

I think it might even be possible to extend this script so that it
doubles as a batch file for Microsft Windows, so maybe we could have two
Linux binaries, a Mac binary, as well as a Microsoft binary all in one
file. It can made threadsafe and re-enterable by using system-supplied
temporary filenames or UUID's instead of "/tmp/binaryfile".
Juha Nieminen <nospam@thanks.invalid>: Oct 22 02:03PM

> dd if="$0" of=/tmp/binaryfile bs=1 skip=${skip} count=${count} > /dev/null 2>&1
 
Since you are copying the contents somewhere else anyway, you could jsut as
well compress that content and run it through gunzip (or even xz), to make
this file smaller.
 
Also, if you don't want to rely in this actually being a file with an actual
name (rather than, for example, being piped through something else, or for
any other reason this script not having a valid name as $0), what you can do
instead is to use heredoc in conjunction with base64 encoding/deconding
(and gzip compression to boot). It will make the file larger, but you won't
be relaying on it being actually a file and $0 being its name.
 
In other words, something along the lines of:
 
base64 -d << 'DATA_END' | gunzip > /tmp/binaryfile
(gzip-compressed base64-encoded data here)
DATA_END
Ralf Fassel <ralfixx@gmx.de>: Oct 22 06:04PM +0200

* Frederick Gotham <cauldwell.thomas@gmail.com>
| dd if="$0" of=/tmp/binaryfile bs=1 skip=${skip} count=${count} > /dev/null 2>&1
 
Nitpick: use mktemp(1), or at least something along these lines to
create the temporary file and remove it after use:
 
cleanup () {
rm -f "$TMPFILE"
exit $1
}
TMPFILE=${TMPDIR:-/tmp}/foobar.$$
trap "cleanup 1" 1 2 15
 
dd ... of="$TMPFILE" ...
 
TNX
R'
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: