Discussion:
Refuting the {Linz, Sipser and Kozen} HP Proofs (deciders within
(too old to reply)
olcott
2020-12-14 21:56:55 UTC
Permalink
<snip>
The outermost Halts() always returns a value to its
caller even though it must sometimes abort the
simulations of inner infinite invocations of itself.
And since it claims to be simulating those inner
instances and to abort those instances only in cases
where they would not otherwise halt, it is asserting that
there *are* inputs to Halts() which will not halt. Ergo,
it is asserting that Halts() is *not* a decider.
...in those cases where it does not halt and return a
value to its caller Halts() is not a decider. On those
invocations of Halts() where it does halt and return a
value to its caller it is a decider.
A program is either a decider or it isn't. There's no such
thing as a program which is sometimes a decider and
sometimes isn't.
André
You already know that is pure bullshit or the term "partial
decider" would not exist. What motive do you have for saying
things that you know are pure bullshit?
A partial decider is not a decider. More importantly, it is
not a "sometimes decider".
A partial decider makes a correct decision for a particular
class of inputs but may fail to halt for other inputs.
Your program sometimes halts and sometimes doesn't for the
*same* inputs. So you cannot even claim your program is a
partial decider, let alone an actual decider.
André
So in other words you "believe" against logic that some
infinitely recursive invocations <do> return a result to their
caller. That sounds nutty to me.
How you can possibly get that idea from what I wrote is utterly
beyond me.
I am saying that anything which has the possibility of getting
caught in infinite recursion cannot return a result and
therefore cannot constitute a decider.
André
Except in those cases that it has not been caught in infinite
recursion and does return a result to its caller.
Alternatively a function that can and does correctly detect
infinite recursion on itself and return its decision to its
caller does not count.
Basically you are saying that it is wrong all of the time even
though it is right some of the time.
No. I am saying that it is not a decider. A decider *must* return
a result for *all* inputs. That's the definition of 'decider'.
Something that only returns results in some instances is not a
decider. I don't know how I can make this any clearer...
André
The way that you are defining it when a function does correctly
decide that it has been infinitely invoked that even though this
decision is correct it does not count.
Since a partial decider <is> a decider for some inputs and not for
other inputs, then this same idea can be extended to some
invocations and not all invocations, otherwise correctly deciding
infinite recursion does not count even when the decision is correct.
A partial decider is not a decider any more than a half-dollar is a
dollar. A partial decider is something that correctly decides some
cases, not something which is a decider in some cases. Things are
either deciders or they aren't.
A partial decider that decides the {Linz, Sipser, Kozen}
counter-examples refutes these three proofs.
That a program correctly decides some cases does not make it a
decider in those cases. You could call it a partial decider, but
not a decider.
However, in the case of your program, you can't even call it that
because it sometimes returns and other times does not return *on
the same input*. A partial decider is something which decides some
set of inputs and fails to decide another, *disjoint* set of
inputs. Something which gets different results for the same input
isn't even a function, let alone a decider or partial decider.
André
So in other words when a partial decider correctly determines that
it has been invoked in infinite recursion it must fix the bug in
this infinitely recursive invocation so that it can report its
infinitely recursive invocation to its infinitely recursive caller,
that is no longer infinitely recursive because it fixed this bug.
<sarcasm>
That makes perfect sense to me.
</sarcasm>
No, I did not say that. You need to make at least some effort to read
for comprehension. I said that something which can be caught in
infinite recursion is *not* a decider. This is getting rather
tedious. Something that correctly decides some cases but not others
could be a partial decider, but not if it decides the *same* input in
some cases but not others.
01 void H_Hat(u32 P)
02 {
03 u32 Input_Halts = DebugTrace(P, P);
04 if (Input_Halts)
05 HERE: goto HERE;
06 else
07 HALT
08 }
Halts((u32)H_Hat,(u32)H_Hat) is correctly decided** as not halting
because it aborts the invocation of itself on line 03.
You've switched back from using Halts() to using DebugTrace(). Are these
intended to be distinct functions?
** Halts returns the correct halting determination.
(a) Halts is not a decider even though it correctly decides.
(b) Halts would be a decider if it aborted the infinite recursion of
any other function besides itself.
That is ridiculous!
Look, a decider is a type of *function*. To be a function, something
must consistently map the same input to the same result, but that isn't
what you get above. Assuming that your DebugTrace() and Halts() are
intended to be the same, you are claiming that
Halts(H_Hat, H_Hat)
returns false. This means Halts(H_Hat, H_Hat) is a finite computation.
But by returning false is is also claiming that the instance of
Halts(H_Hat, H_Hat) invoked from within H_Hat must be aborted as a
non-halting function.
This is a contradiction.
As I have said very many times (no one notices because they only glance
at a few of my words to contrive some lame basis for a rebuttal that
Halts(H_Hat, H_Hat) is only a finite computation because it aborts the
A computation that would not halt if its simulation were not
halted is indeed a non-halting computation.
If Halts aborts itself, is it halted or aborted? That's the question.
Halts() simulates H_Hat() that invokes Halts() in infinite recursion.
Halts() stops simulating H_Hat() including its infinite recursive
invocation of Halts(), returning its non-halting decision to main()
where it is output.
If we say "halted" then H_Hat inverts whatever result it returns,
It is not possible for an aborted function to invert any damn thing.
and :Halts" is wrong. If we say "aborted" then "Halts" isn't a function,
which is a slightly more subtle requirement of H_Hat.
Certainly an at least partial halt decider that bases its halting
decision by looking for patterns of behavior of its inputs can stop
simulating this input as soon as it detects any non-halting pattern.
It does not make any damn difference if it detects an infinite loop, or
infinite recursion. It also does not make any damn difference which
function is involved in infinite recursion. As long as Halts() detects
the non-halting behavior of its input then it can stop simulating this
input and report non-halting.
void H_Hat(u32 P)
{
u32 Input_Halts = Halts(P, P);
if (Input_Halts)
HERE: goto HERE;
else
HALT
}
int main()
{
u32 Input_Would_Halt = Halts((u32)H_Hat, (u32)H_Hat);
Output("[Input_Would_Halt] =", Input_Would_Halt);
HALT;
}
I finally renamed my internal DebugTrace() to Halts() now that it
finally does return its correct halting decision to main().
Your techique is suspicious, because you're transcribing the pseudo-code
from the usual halting proofs into the higher level C language, but then
are messing with the execution at a lower level. The mapping between the
C language and abstract concepts like "pure function of certain
arguments" only depends on certain conventions being upheld in the
machine language translation, and the expected execution model for which
the translation is made.
At the TM level is is merely the execution of a TM on a finite string,
in this case the TM a a halt decider based on a UTM.

It is not the details of the C/x86 implementation that are important it
is whether or not the architecture of the C/x86 implementation maps to a
TM solution.
Halts is not a pure function, or else not a pure function of the
two arguments that are visible at the C source code level.
We need the mapping to the x86 level so that we have a complete di-graph
graph of all control flow, the C level does not provide this.
https://en.wikipedia.org/wiki/Directed_graph
I have a similar C program for GNU/Linux which doesn't require any
complicated virtual machine. In my program, I reveal everything I'm
doing.
My program calls H_Hat(H_Hat), showing that it halts, and then
$ ./fakehalt
Got here so H_Hat(H_Hat) halted!
H_Hat(H_Hat) halts!
Source of fakehalt.c follows. Note that Halts does not rely on any
mutating global state or anything. The subterfuge is that because
Halts uses debugging introspection to inspect the machine state, it is
not simply a function of the declared arguments. My Halts is a function
of the entire call stack, and using that call stack it can tell that
it's being called directly from main, with no H_Hat involved.
I don't currently need to look at the stack. I merely examine the
complete sequence of every x86 instruction that has been executed in
user code.

In any case it does not matter what the Hell that I do as long as there
are no inputs that are provably undecidable.
You must be perpetrating the moral equivalent of this trick in your
code. This will be easily shown when you reveal all the end-to-end
processing details.
#include <stdio.h>
#include <execinfo.h>
typedef void (*fun_t)(void *data);
typedef int (*decider_t)(fun_t, void *data);
int Halts(fun_t, void *);
void H_Hat(void *data)
{
if (Halts((fun_t) data, data)) {
for (;;)
fflush(stdout);
} else {
return;
}
}
int Halts(fun_t fun, void *data)
{
void *buffer[10];
int i, ncallers = backtrace(buffer, 10);
(void) fun;
(void) data;
for (i = 0; i < ncallers; i++)
if (buffer[i] >= (void *) H_Hat && buffer[i] < (void *) Halts)
return 0;
return 1;
}
int main(void)
{
H_Hat((void *) H_Hat);
puts("Got here so H_Hat(H_Hat) halted!");
if (Halts(H_Hat, (void *) H_Hat))
puts("H_Hat(H_Hat) halts!");
else
puts("H_Hat(H_Hat) doesn't halt!");
return 0;
}
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
wolfgang kern
2020-12-15 09:05:21 UTC
Permalink
removed theory etc.

On 14.12.2020 22:56, olcott wrote and cyted:

A LOT of useless HLL lines.
please don't bother us here with this, it's an assembler group.
__
wolfgang
olcott
2020-12-17 01:40:50 UTC
Permalink
Post by wolfgang kern
removed theory etc.
A LOT of useless HLL lines.
please don't bother us here with this, it's an assembler group.
__
wolfgang
That last message was sent by mistake.

This is the only one that might be relevant to this group:
I refuted the halting problem proofs by building a universal Turing
machine that has the x86 language as its machine description language.
The key aspect of this proof is the x86 execution trace at the bottom of
this message.

If you have a good understanding of:
(a) software engineering,
(b) The C programming language
(c) The x86 programming language

You will be able to easily verify that Halts() does correctly decide the
halt status of H_Hat().

The x86utm operating system provides the operating environment to
execute virtual machines computationally equivalent to universal Turing
machines having the x86 language as their machine description language.
x86utm executes the COFF object file output of the Microsoft C compiler.
The x86utm operating system is based on a world class x86 emulator that
has been developed and tested for decades.

x86 language ≡ von Neumann architecture ≡ UTM ≡ RASP Machine
It is common knowledge that all x86 based programs are computationally
equivalent to UTMs for every computation that does not require more
memory than they have.
Post by wolfgang kern
Every computation that would not halt if its simulation
were not halted is by logical necessity a non-halting computation.
We can verify that the following execution trace of the computational
equivalent of:
(a) {Peter Linz: H, Michael Sipser: H, Dexter Kozen: K}
Correctly decides halting on the the computational equivalent of:
(b) {Peter Linz: Ĥ, Michael Sipser: D, Dexter Kozen: N}

The following execution trace can be verified as correctly deciding the
halting status of its input with only these three prerequisites and
nothing more:

(a) An elementary understanding of software engineering, such things as:
(a) infinite loops do not have a fixed number of iterations and (b)
infinitely recursive invocations never return any value to their caller.

(b) A basic understanding of how the C programming language maps to x86
instructions. This is used to verify that the translations of the "C"
functions into their x86 equivalents are correct. It is also used to
verifiy that the execution trace of these x86 functions is correct.

(c) An understanding of one very elementary infinite recursion detection
algorithm: Whenever an execution trace shows a second call to the same
function from the same machine address with no control flow instructions
in-between this second invocation is always an instance of infinite
recursion. From this it is very easy to see that the halt decider did
apply this simple criteria in its halt deciding decision, thus meeting
he generic criteria shown above.

Actual debug trace of Halts() deciding halting on H_Hat()

#define HALT __asm hlt

void H_Hat(u32 P)
{
u32 Input_Halts = Halts(P, P);
if (Input_Halts)
HERE: goto HERE;
else
HALT
}

int main()
{
u32 Input_Would_Halt = Halts((u32)H_Hat, (u32)H_Hat);
Output_Debug_Trace();
Output("Input_Would_Halt =", Input_Would_Halt);
HALT;
}

_H_Hat()
[000005e6](01) 55 push ebp
[000005e7](02) 8bec mov ebp,esp
[000005e9](01) 51 push ecx
[000005ea](03) 8b4508 mov eax,[ebp+08]
[000005ed](01) 50 push eax
[000005ee](03) 8b4d08 mov ecx,[ebp+08]
[000005f1](01) 51 push ecx
[000005f2](05) e8effdffff call 000003e6
[000005f7](03) 83c408 add esp,+08
[000005fa](03) 8945fc mov [ebp-04],eax
[000005fd](04) 837dfc00 cmp dword [ebp-04],+00
[00000601](02) 7404 jz 00000607
[00000603](02) ebfe jmp 00000603
[00000605](02) eb01 jmp 00000608
[00000607](01) f4 hlt
[00000608](02) 8be5 mov esp,ebp
[0000060a](01) 5d pop ebp
[0000060b](01) c3 ret

_main()
[00000616](01) 55 push ebp
[00000617](02) 8bec mov ebp,esp
[00000619](01) 51 push ecx
[0000061a](05) 68e6050000 push 000005e6
[0000061f](05) 68e6050000 push 000005e6
[00000624](05) e8bdfdffff call 000003e6
[00000629](03) 83c408 add esp,+08
[0000062c](03) 8945fc mov [ebp-04],eax
[0000062f](05) e8f2fcffff call 00000326
[00000634](03) 8b45fc mov eax,[ebp-04]
[00000637](01) 50 push eax
[00000638](05) 68a3020000 push 000002a3
[0000063d](05) e894fcffff call 000002d6
[00000642](03) 83c408 add esp,+08
[00000645](01) f4 hlt
[00000646](02) 8be5 mov esp,ebp
[00000648](01) 5d pop ebp
[00000649](01) c3 ret

Output_Debug_Trace() Trace_List.size(24)
---[00000616](01) 55 push ebp
---[00000617](02) 8bec mov ebp,esp
---[00000619](01) 51 push ecx
---[0000061a](05) 68e6050000 push 000005e6
---[0000061f](05) 68e6050000 push 000005e6
---[00000624](05) e8bdfdffff call 000003e6 --CALL [000003e6]
---[000005e6](01) 55 push ebp
---[000005e7](02) 8bec mov ebp,esp
---[000005e9](01) 51 push ecx
---[000005ea](03) 8b4508 mov eax,[ebp+08]
---[000005ed](01) 50 push eax
---[000005ee](03) 8b4d08 mov ecx,[ebp+08]
---[000005f1](01) 51 push ecx
---[000005f2](05) e8effdffff call 000003e6 --CALL [000003e6]
---[000005e6](01) 55 push ebp
---[000005e7](02) 8bec mov ebp,esp
---[000005e9](01) 51 push ecx
---[000005ea](03) 8b4508 mov eax,[ebp+08]
---[000005ed](01) 50 push eax
---[000005ee](03) 8b4d08 mov ecx,[ebp+08]
---[000005f1](01) 51 push ecx
---[000005f2](05) e8effdffff call 000003e6 --CALL [000003e6]
Input Aborted because of INFINITE RECURSION from [000005f2] to [000003e6]
---[00000629](03) 83c408 add esp,+08
---[0000062c](03) 8945fc mov [ebp-04],eax
===[0000062f](05) e8f2fcffff call 00000326
....[00000634](03) 8b45fc mov eax,[ebp-04]
....[00000637](01) 50 push eax
....[00000638](05) 68a3020000 push 000002a3
===[0000063d](05) e894fcffff call 000002d6
Input_Would_Halt = 0
....[00000642](03) 83c408 add esp,+08
....[00000645](01) f4 hlt

Every time that the same function is called from the same machine
address a second time without any control flow instructions in-between
is a case of infinite recursion.
This is shown at execution trace lines 14-22 above.

http://www.liarparadox.org/Peter_Linz_HP(Pages_315-320).pdf

Linz, Peter 1990. An Introduction to Formal Languages and Automata.
Lexington/Toronto: D. C. Heath and Company.

http://www.liarparadox.org/sipser_165.pdf

Sipser, Michael 1997. Introduction to the Theory of Computation. Boston:
PWS Publishing Company (165-167)

http://www.liarparadox.org/kozen_233.pdf

The Kozen computation is identical to the Peter Linz computation merely
swapping function names Linz.H is swapped for Kozen.K and Linz.Ĥ is
swapped for Kozen.N

Kozen, Dexter 1997. Automata and Computability. New York:
Springer-Verlag. (231-234).
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
Frank Kotler
2020-12-17 06:41:50 UTC
Permalink
Post by olcott
Post by wolfgang kern
removed theory etc.
A LOT of useless HLL lines.
please don't bother us here with this, it's an assembler group.
__
wolfgang
That last message was sent by mistake.
Hi Pete,

As moderator of this newsgroup, I am very reluctant to reject your
messages just because I'm not interested (but I'm not). Woifgang's
message makes me think I'm not the only one...

Could I ask you to not post on this topic here?

Could I ask Wolfgang (and others) to simply ignore messages you don't
like? It only takes you a second to click "next".

There's an "issue" here. If clax86 is on the lost of newsgroups, it
comes to my attention. If I reject it - NONE of the messages get posted!
If it were up to me, it wouldn't work this way, but it isn't.

So I think we'll all be happier if clax86 is off your list

I'm sorry this is a problem.

Best,
Frank
moderator
***@myfairpoint.net
Terje Mathisen
2020-12-17 11:48:36 UTC
Permalink
Post by Frank Kotler
Post by olcott
Post by wolfgang kern
removed theory etc.
A LOT of useless HLL lines.
please don't bother us here with this, it's an assembler group.
__
wolfgang
That last message was sent by mistake.
Hi Pete,
As moderator of this newsgroup, I am very reluctant to reject your
messages just because I'm not interested (but I'm not). Woifgang's
message makes me think I'm not the only one...
Could I ask you to not post on this topic here?
Could I ask Wolfgang (and others) to simply ignore messages you don't
like? It only takes you a second to click "next".
There's an "issue" here. If clax86 is on the lost of newsgroups, it
comes to my attention. If I reject it - NONE of the messages get posted!
If it were up to me, it wouldn't work this way, but it isn't.
So I think we'll all be happier if clax86 is off your list
I'm sorry this is a problem.
This is a _big_ problem imho, you Frank have been a lot more patient
that I would have been, I would have at a minimum grey-listed olcott,
i.e. only manually forwarded any messages that were clearly relevant to
clax.

Terje
--
- <Terje.Mathisen at tmsw.no>
"almost all programming can be viewed as an exercise in caching"
Frank Kotler
2020-12-17 22:17:17 UTC
Permalink
Post by Terje Mathisen
This is a _big_ problem imho, you Frank have been a lot more patient
that I would have been, I would have at a minimum grey-listed olcott,
i.e. only manually forwarded any messages that were clearly relevant to
clax.
Terje
Sorry. I hope it is solved.

Best,
Frank
olcott
2020-12-17 23:19:59 UTC
Permalink
Post by Frank Kotler
Post by Terje Mathisen
This is a _big_ problem imho, you Frank have been a lot more patient
that I would have been, I would have at a minimum grey-listed olcott,
i.e. only manually forwarded any messages that were clearly relevant
to clax.
Terje
Sorry. I hope it is solved.
Best,
Frank
I initially accidentally added this group to the cross-post list because
I am unable to wear my glasses for a few weeks. I try to always post to
comp.theory and two other groups.
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
olcott
2020-12-17 14:07:59 UTC
Permalink
Post by Frank Kotler
Post by olcott
Post by wolfgang kern
removed theory etc.
A LOT of useless HLL lines.
please don't bother us here with this, it's an assembler group.
__
wolfgang
That last message was sent by mistake.
Hi Pete,
As moderator of this newsgroup, I am very reluctant to reject your
messages just because I'm not interested (but I'm not). Woifgang's
message makes me think I'm not the only one...
Could I ask you to not post on this topic here?
Could I ask Wolfgang (and others) to simply ignore messages you don't
like? It only takes you a second to click "next".
There's an "issue" here. If clax86 is on the lost of newsgroups, it
comes to my attention. If I reject it - NONE of the messages get posted!
If it were up to me, it wouldn't work this way, but it isn't.
So I think we'll all be happier if clax86 is off your list
I'm sorry this is a problem.
Best,
Frank
moderator
One of my messages accidentally got cross-posted to this group.
Everytime that I reply to this message it gets cross-posted again.
I will try and find it and remove the cross-post link.

The people on comp.theory don't understand the x86 language well enough
to understand that my infinite recursion detection algorithm is correct.
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
James Harris
2020-12-19 11:57:28 UTC
Permalink
On 17/12/2020 06:41, Frank Kotler wrote:

...
Post by Frank Kotler
Hi Pete,
As moderator of this newsgroup, I am very reluctant to reject your
messages just because I'm not interested (but I'm not). Woifgang's
message makes me think I'm not the only one...
Could I ask you to not post on this topic here?
Could I ask Wolfgang (and others) to simply ignore messages you don't
like? It only takes you a second to click "next".
There's an "issue" here. If clax86 is on the lost of newsgroups, it
comes to my attention. If I reject it - NONE of the messages get posted!
If it were up to me, it wouldn't work this way, but it isn't.
Thanks for what you are doing, Frank. IIRC you are the only one who took
up the challenge of moderating this group and what you do for us is
appreciated.

At the risk of continuing a thread that is already off the topic of x86
asm I wonder if there's not some way the rest of us could make the job
of the moderator easier. Maybe that's something we should discuss.
--
James Harris
Kerr-Mudd,John
2020-12-19 12:22:24 UTC
Permalink
On Sat, 19 Dec 2020 11:57:28 GMT, James Harris
Post by James Harris
...
Post by Frank Kotler
Hi Pete,
As moderator of this newsgroup, I am very reluctant to reject your
messages just because I'm not interested (but I'm not). Woifgang's
message makes me think I'm not the only one...
Could I ask you to not post on this topic here?
Could I ask Wolfgang (and others) to simply ignore messages you don't
like? It only takes you a second to click "next".
Sounds a sensible approach.
Post by James Harris
Post by Frank Kotler
There's an "issue" here. If clax86 is on the lost of newsgroups, it
comes to my attention. If I reject it - NONE of the messages get
posted! If it were up to me, it wouldn't work this way, but it isn't.
Thanks for what you are doing, Frank. IIRC you are the only one who
took up the challenge of moderating this group and what you do for us
is appreciated.
At the risk of continuing a thread that is already off the topic of
x86 asm I wonder if there's not some way the rest of us could make the
job of the moderator easier. Maybe that's something we should discuss.
Is there any need for moderating? Just ignore any religious posts.
--
Bah, and indeed, Humbug.
olcott
2020-12-19 19:46:23 UTC
Permalink
Post by Kerr-Mudd,John
On Sat, 19 Dec 2020 11:57:28 GMT, James Harris
Post by James Harris
...
Post by Frank Kotler
Hi Pete,
As moderator of this newsgroup, I am very reluctant to reject your
messages just because I'm not interested (but I'm not). Woifgang's
message makes me think I'm not the only one...
Could I ask you to not post on this topic here?
Could I ask Wolfgang (and others) to simply ignore messages you don't
like? It only takes you a second to click "next".
Sounds a sensible approach.
Post by James Harris
Post by Frank Kotler
There's an "issue" here. If clax86 is on the lost of newsgroups, it
comes to my attention. If I reject it - NONE of the messages get
posted! If it were up to me, it wouldn't work this way, but it isn't.
Thanks for what you are doing, Frank. IIRC you are the only one who
took up the challenge of moderating this group and what you do for us
is appreciated.
At the risk of continuing a thread that is already off the topic of
x86 asm I wonder if there's not some way the rest of us could make the
job of the moderator easier. Maybe that's something we should discuss.
Is there any need for moderating? Just ignore any religious posts.
My post was not totally off-topic because the most important part of
this post is examining the semantic meaning of the execution trace of
this sequence of x86 instructions:

---[000005e6](01) 55 push ebp
---[000005e7](02) 8bec mov ebp,esp
---[000005e9](01) 51 push ecx
---[000005ea](03) 8b4508 mov eax,[ebp+08]
---[000005ed](01) 50 push eax
---[000005ee](03) 8b4d08 mov ecx,[ebp+08]
---[000005f1](01) 51 push ecx
---[000005f2](05) e8effdffff call 000003e6 --CALL [000003e6]
---[000005e6](01) 55 push ebp
---[000005e7](02) 8bec mov ebp,esp
---[000005e9](01) 51 push ecx
---[000005ea](03) 8b4508 mov eax,[ebp+08]
---[000005ed](01) 50 push eax
---[000005ee](03) 8b4d08 mov ecx,[ebp+08]
---[000005f1](01) 51 push ecx
---[000005f2](05) e8effdffff call 000003e6 --CALL [000003e6]
Input Aborted because of INFINITE RECURSION from [000005f2] to [000003e6]

Every time that the same function is called from the same machine
address a second time without any control flow instructions in-between
(within an execution trace) is a case of infinite recursion. This is
shown at execution trace lines 1-16 above.

People on other groups do not know the x86 language well enough to
understand that this execution trace does specify infinite recursion.
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
Terje Mathisen
2020-12-19 21:18:11 UTC
Permalink
Post by olcott
Post by Kerr-Mudd,John
On Sat, 19 Dec 2020 11:57:28 GMT, James Harris
Post by James Harris
...
Post by Frank Kotler
Hi Pete,
As moderator of this newsgroup, I am very reluctant to reject your
messages just because I'm not interested (but I'm not). Woifgang's
message makes me think I'm not the only one...
Could I ask you to not post on this topic here?
Could I ask Wolfgang (and others) to simply ignore messages you don't
like? It only takes you a second to click "next".
Sounds a sensible approach.
Post by James Harris
Post by Frank Kotler
There's an "issue" here. If clax86 is on the lost of newsgroups, it
comes to my attention. If I reject it - NONE of the messages get
posted! If it were up to me, it wouldn't work this way, but it isn't.
Thanks for what you are doing, Frank. IIRC you are the only one who
took up the challenge of moderating this group and what you do for us
is appreciated.
At the risk of continuing a thread that is already off the topic of
x86 asm I wonder if there's not some way the rest of us could make the
job of the moderator easier. Maybe that's something we should discuss.
Is there any need for moderating? Just ignore any religious posts.
My post was not totally off-topic because the most important part of
this post is examining the semantic meaning of the execution trace of
---[000005e6](01)  55                  push ebp
---[000005e7](02)  8bec                mov ebp,esp
---[000005e9](01)  51                  push ecx
---[000005ea](03)  8b4508              mov eax,[ebp+08]
---[000005ed](01)  50                  push eax
---[000005ee](03)  8b4d08              mov ecx,[ebp+08]
---[000005f1](01)  51                  push ecx
---[000005f2](05)  e8effdffff          call 000003e6       --CALL
[000003e6]
---[000005e6](01)  55                  push ebp
---[000005e7](02)  8bec                mov ebp,esp
---[000005e9](01)  51                  push ecx
---[000005ea](03)  8b4508              mov eax,[ebp+08]
---[000005ed](01)  50                  push eax
---[000005ee](03)  8b4d08              mov ecx,[ebp+08]
---[000005f1](01)  51                  push ecx
---[000005f2](05)  e8effdffff          call 000003e6       --CALL
[000003e6]
Input Aborted because of INFINITE RECURSION from [000005f2] to [000003e6]
Every time that the same function is called from the same machine
address a second time without any control flow instructions in-between
(within an execution trace) is a case of infinite recursion. This is
shown at execution trace lines 1-16 above.
People on other groups do not know the x86 language well enough to
understand that this execution trace does specify infinite recursion.
(To any comp.theory readers: I am getting this as scatter noise in the
moderated clax86 newsgroup where it is totally offtopic. :-( )

And you _really_ have no idea whatsoever about mathematical proofs if
you think that dressing your "proof" up as x86 asm makes _any_
difference at all. You could just as well have been trying to refute the
second law of thermodynamics. :-(

A few days ago you even provoked a math guy to explain why your idea is
totally bonkers.

"Extraordinary claims require extraordinary proof", what you have is
similar to my math teacher in secondary school who thought he had
invented a construction which could trisect an arbitrary angle. Even at
that time (i.e. when I was about 14/15 years old I found it quite easy
to prove that what he had was a method which quickly brought the error
down to well less than his pencil line thickness, but that's like
claiming that a specific rational number is equal to sqrt(2).

Again, this has nothing to do with x86 asm.

Terje
--
- <Terje.Mathisen at tmsw.no>
"almost all programming can be viewed as an exercise in caching"
olcott
2020-12-19 21:25:18 UTC
Permalink
Post by Terje Mathisen
Post by olcott
Post by Kerr-Mudd,John
On Sat, 19 Dec 2020 11:57:28 GMT, James Harris
Post by James Harris
...
Post by Frank Kotler
Hi Pete,
As moderator of this newsgroup, I am very reluctant to reject your
messages just because I'm not interested (but I'm not). Woifgang's
message makes me think I'm not the only one...
Could I ask you to not post on this topic here?
Could I ask Wolfgang (and others) to simply ignore messages you don't
like? It only takes you a second to click "next".
Sounds a sensible approach.
Post by James Harris
Post by Frank Kotler
There's an "issue" here. If clax86 is on the lost of newsgroups, it
comes to my attention. If I reject it - NONE of the messages get
posted! If it were up to me, it wouldn't work this way, but it isn't.
Thanks for what you are doing, Frank. IIRC you are the only one who
took up the challenge of moderating this group and what you do for us
is appreciated.
At the risk of continuing a thread that is already off the topic of
x86 asm I wonder if there's not some way the rest of us could make the
job of the moderator easier. Maybe that's something we should discuss.
Is there any need for moderating? Just ignore any religious posts.
My post was not totally off-topic because the most important part of
this post is examining the semantic meaning of the execution trace of
---[000005e6](01)  55                  push ebp
---[000005e7](02)  8bec                mov ebp,esp
---[000005e9](01)  51                  push ecx
---[000005ea](03)  8b4508              mov eax,[ebp+08]
---[000005ed](01)  50                  push eax
---[000005ee](03)  8b4d08              mov ecx,[ebp+08]
---[000005f1](01)  51                  push ecx
---[000005f2](05)  e8effdffff          call 000003e6       --CALL
[000003e6]
---[000005e6](01)  55                  push ebp
---[000005e7](02)  8bec                mov ebp,esp
---[000005e9](01)  51                  push ecx
---[000005ea](03)  8b4508              mov eax,[ebp+08]
---[000005ed](01)  50                  push eax
---[000005ee](03)  8b4d08              mov ecx,[ebp+08]
---[000005f1](01)  51                  push ecx
---[000005f2](05)  e8effdffff          call 000003e6       --CALL
[000003e6]
Input Aborted because of INFINITE RECURSION from [000005f2] to [000003e6]
Every time that the same function is called from the same machine
address a second time without any control flow instructions in-between
(within an execution trace) is a case of infinite recursion. This is
shown at execution trace lines 1-16 above.
People on other groups do not know the x86 language well enough to
understand that this execution trace does specify infinite recursion.
(To any comp.theory readers: I am getting this as scatter noise in the
moderated clax86 newsgroup where it is totally offtopic. :-( )
And you _really_ have no idea whatsoever about mathematical proofs if
you think that dressing your "proof" up as x86 asm makes _any_
difference at all. You could just as well have been trying to refute the
second law of thermodynamics. :-(
A few days ago you even provoked a math guy to explain why your idea is
totally bonkers.
"Extraordinary claims require extraordinary proof", what you have is
similar to my math teacher in secondary school who thought he had
invented a construction which could trisect an arbitrary angle. Even at
that time (i.e. when I was about 14/15 years old I found it quite easy
to prove that what he had was a method which quickly brought the error
down to well less than his pencil line thickness, but that's like
claiming that a specific rational number is equal to sqrt(2).
Again, this has nothing to do with x86 asm.
Terje
All that I am asking members of the comp.lang.asm.x86 group to do is
explain that the above execution trace does specify infinite recursion.

If you don't know the x86 language or software engineering well enough
to answer this then you can simply refrain from responding.
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
wolfgang kern
2020-12-22 07:05:54 UTC
Permalink
Post by olcott
All that I am asking members of the comp.lang.asm.x86 group to do is
explain that the above execution trace does specify infinite recursion.
If you don't know the x86 language or software engineering well enough
to answer this then you can simply refrain from responding.
you wont see any answer to this because of "unknown call target".
it's only recursive (error stack overflow) if 05e6 is part of 03e6.
there are much easier ways to produce such errors.
__
wolfgang
sorry Frank, I cannot stay quiet on illogical assumptions.
Frank Kotler
2020-12-22 22:07:45 UTC
Permalink
Post by wolfgang kern
Post by olcott
All that I am asking members of the comp.lang.asm.x86 group to do is
explain that the above execution trace does specify infinite recursion.
If you don't know the x86 language or software engineering well enough
to answer this then you can simply refrain from responding.
you wont see any answer to this because of "unknown call target".
it's only recursive (error stack overflow) if 05e6 is part of 03e6.
there are much easier ways to produce such errors.
__
wolfgang
sorry Frank, I cannot stay quiet on illogical assumptions.
Okay Wolfgang - I w0n't remove ya from the whitelist. :)

This seems "on-topic" to me. Weren't you one of the ones who was
complaining? Apologize to Terje! (seriously - hope this isn't a problem)

Best,
Frank
Frank Kotler
2020-12-20 00:13:31 UTC
Permalink
Post by Kerr-Mudd,John
On Sat, 19 Dec 2020 11:57:28 GMT, James Harris
...
Post by Kerr-Mudd,John
Post by James Harris
At the risk of continuing a thread that is already off the topic of
x86 asm I wonder if there's not some way the rest of us could make the
job of the moderator easier. Maybe that's something we should discuss.
Is there any need for moderating? Just ignore any religious posts.
Thank you,,,

Unfortunately, without approval from a moderator, nothing will get
posted at all. I am advised that removing the group from moderation will
make matters worse. Perhaps we should try it?

comp.lang.asm - the unmoderated group - may still exist. We could try
that. Last I tried it, it worked. Your server may not carry it.

I would like to have an "assistant" - if I can even remember that
address - just to have a moderator in line when I kick off. The mailbox
is the real moderator. Terje is providing the mailbox and may be stuck
with it. Any "approved:" header works... you may need special permission
to post with such a header. Depends om the server, I think.

Meanwhile, I'll try to approve the on-topic stuff - just ohnore the
off-topic stuff that slips by me...

Best,
Frank
Rod Pemberton
2020-12-20 05:19:32 UTC
Permalink
On Sat, 19 Dec 2020 19:13:31 -0500
Post by Frank Kotler
Post by Kerr-Mudd,John
Is there any need for moderating? Just ignore any religious posts.
Thank you,,,
Unfortunately, without approval from a moderator, nothing will get
posted at all. I am advised that removing the group from moderation
will make matters worse. Perhaps we should try it?
Well, I seem to recall asking for a casual "vote" on this a few times,
but no one ever really did state their preferences ... Is everyone just
indifferent about CLAX's future?


Option A: keep comp.lang.asm.x86 (CLAX) alive
1) auto-approve all messages to CLAX
2) alternately, find a backup moderator

Option B: kill the group
1) halt approval of all messages to CLAX

Option C: move the group
1) auto-approve everyone posting to CLAX
2) but, post all messages to a different newsgroup
3) optionally, set message follow-ups to the new newsgroup
Post by Frank Kotler
comp.lang.asm - the unmoderated group - may still exist. We could try
that. Last I tried it, it worked. Your server may not carry it.
I don't see comp.lang.asm (CLA) on either of two free-to-read Usenet
servers. Google Groups now requires an account to read or search Usenet
groups there. The CLA group is also not listed for Eternal-September's
webpage Usenet hierarchy search. Personally, I would prefer to have CLAX
traffic re-routed to alt.lang.asm (ALA). ALA has seemed to be widely
available over the past fifteen years or so, and has less traffic than
CLAX. IIRC, you sent rejected messages there in the past. The only
disadvantage - besides nuisance posts - is that ALA is on alt.*
hierarchy instead of comp.* hierarchy. I.e., some servers might not
have the alt.* hierarchy because of binaries, and I don't recall ever
seeing Terje post there. IIRC, Herbert is the only one to get a
non-moderator Approved header through, or was that Wolfgang? ...
--
The EU mocked the US response to Covid in the spring of 2020. With a
massive resurgence of Covid in the EU, they aren't laughing now.
James Harris
2020-12-20 11:43:54 UTC
Permalink
Post by Frank Kotler
Post by Kerr-Mudd,John
On Sat, 19 Dec 2020 11:57:28 GMT, James Harris
...
Post by Kerr-Mudd,John
Post by James Harris
At the risk of continuing a thread that is already off the topic of
x86 asm I wonder if there's not some way the rest of us could make the
job of the moderator easier. Maybe that's something we should discuss.
Is there any need for moderating? Just ignore any religious posts.
I think there is. I appreciate the moderation. It stops this group being
flooded with posts which are completely off topic as is happening to
other groups.

That said, I wonder if those of us who post here could make the job of
the moderator a bit easier. Specifically:

For me, the best thing about moderation is that it filters out the
garbage which is unquestionably spam. I mean things such as adverts for
manuals or for medicines etc. Personally, I don't mind topics like
olcott's which are only vaguely related to asm programming: such things
could be a problem if the group was very busy with them but it's not.
And it's no problem at all for the rest of us to delete or ignore any
messages we personally feel are too far away from x86 asm.

Don't get me wrong. It would be nice to have only the 'right' messages
here but IMO that's an unnecessary ask of a moderator. For one thing,
each person will have his own idea as to which messages are 'right'. For
another, each of us can decide for himself which messages to read. It's
no great trouble to do so.

So ISTM (and this is just my view) the best balance is to whitelist
those who write about anything vaguely connected with x86 assembly,
causing all spam (adverts etc) to be filtered out, and to leave it to
the members of the group to deal with questions of what they consider to
be strictly on topic or not.

Further, if a whitelisted poster goes rogue and starts to try to use the
group to proselytise or publish other clearly off-topic writings that he
knows it's wrong to post I would be happy to see him removed from the
whitelist without mercy! And to be kept off for a long, long time. There
is at least one unmoderated asm group for such people to use.

AISI that lot would ask the least of the moderator while also keeping
the group clear of spam.

But that's just my view.

...
Post by Frank Kotler
comp.lang.asm - the unmoderated group - may still exist. We could try
that. Last I tried it, it worked. Your server may not carry it.
I don't think there's a comp.lang.asm but there is an alt.lang.asm which
is unmoderated.

...
Post by Frank Kotler
Meanwhile, I'll try to approve the on-topic stuff - just ohnore the
off-topic stuff that slips by me...
Thanks for what you've been doing for us, Frank.
--
James Harris
Robert Prins
2020-12-20 14:33:36 UTC
Permalink
Post by Frank Kotler
Post by Kerr-Mudd,John
On Sat, 19 Dec 2020 11:57:28 GMT, James Harris
...
Post by Kerr-Mudd,John
Post by James Harris
At the risk of continuing a thread that is already off the topic of
x86 asm I wonder if there's not some way the rest of us could make the
job of the moderator easier. Maybe that's something we should discuss.
Is there any need for moderating? Just ignore any religious posts.
Thank you,,,
Unfortunately, without approval from a moderator, nothing will get posted at
all. I am advised that removing the group from moderation will make matters
worse. Perhaps we should try it?
Probably not before someone's figured out what would happen... I'm pretty sure I
once read that making a group moderated is easier than undoing it!
Post by Frank Kotler
comp.lang.asm - the unmoderated group - may still exist. We could try that. Last
I tried it, it worked. Your server may not carry it.
That's a big show-stopper, Eternal September doesn't carry it, just as is
doesn't carry comp.lang.pascal, whereas is does carry all its
"comp.lang.pascal.*" descendants!
Post by Frank Kotler
I would like to have an "assistant" - if I can  even remember that address -
just to have a moderator in line when I kick off. The mailbox is the real
moderator. Terje is providing the mailbox and may be stuck with it. Any
"approved:" header works... you may need special permission to post with such a
header. Depends om the server, I think.
Just explain what's involved being a moderator. If it's merely a matter of
ticking some boxes, more than a few of us would probably be willing to give a hand!

I'm an admin on <http://zos.efglobe.com/index.php> and weeding out the spam
would just take a few minutes of my time. (Would, because we've closed to forum
(for now/ever?) as the z/OS system is no longer available)
Post by Frank Kotler
Meanwhile, I'll try to approve the on-topic stuff - just ohnore the off-topic
stuff that slips by me...
I like the earlier posted suggestion of an approved-poster list.

Robert
--
Robert AH Prins
robert(a)prino(d)org
The hitchhiking grandfather - https://prino.neocities.org/indez.html
Some REXX code for use on z/OS - https://prino.neocities.org/zOS/zOS-Tools.html
Terje Mathisen
2020-12-20 21:40:06 UTC
Permalink
Post by Robert Prins
Post by Frank Kotler
Post by Kerr-Mudd,John
On Sat, 19 Dec 2020 11:57:28 GMT, James Harris
...
Post by Kerr-Mudd,John
Post by James Harris
At the risk of continuing a thread that is already off the topic of
x86 asm I wonder if there's not some way the rest of us could make the
job of the moderator easier. Maybe that's something we should discuss.
Is there any need for moderating? Just ignore any religious posts.
Thank you,,,
Unfortunately, without approval from a moderator, nothing will get
posted at all. I am advised that removing the group from moderation
will make matters worse. Perhaps we should try it?
Probably not before someone's figured out what would happen... I'm
pretty sure I once read that making a group moderated is easier than
undoing it!
Post by Frank Kotler
comp.lang.asm - the unmoderated group - may still exist. We could try
that. Last I tried it, it worked. Your server may not carry it.
That's a big show-stopper, Eternal September doesn't carry it, just as
is doesn't carry comp.lang.pascal, whereas is does carry all its
"comp.lang.pascal.*" descendants!
Post by Frank Kotler
I would like to have an "assistant" - if I can  even remember that
address - just to have a moderator in line when I kick off. The
mailbox is the real moderator. Terje is providing the mailbox and may
be stuck with it. Any "approved:" header works... you may need special
permission to post with such a header. Depends om the server, I think.
Just explain what's involved being a moderator. If it's merely a matter
of ticking some boxes, more than a few of us would probably be willing
to give a hand!
I'm an admin on <http://zos.efglobe.com/index.php> and weeding out the
spam would just take a few minutes of my time. (Would, because we've
closed to forum (for now/ever?) as the z/OS system is no longer available)
Post by Frank Kotler
Meanwhile, I'll try to approve the on-topic stuff - just ohnore the
off-topic stuff that slips by me...
I like the earlier posted suggestion of an approved-poster list.
This seems like a no-brainer:

Three lists:

White - pass through automatically.
Grey - require manual approval, increment good/bad counters until N
messages. Here I would guess that N = 3 is sufficient as long as they
are all of the same type. Maybe require something like

(good >= 3) && ((good-bad)/all > 0.8)

Black - remove automatically

A former good poster who starts spamming would then be given an email
warning and moved to the grey list with initial good/bad counts of 0/0.

Terje
--
- <Terje.Mathisen at tmsw.no>
"almost all programming can be viewed as an exercise in caching"
Frank Kotler
2020-12-21 04:07:46 UTC
Permalink
On 12/20/2020 04:40 PM, Terje Mathisen wrote:

...
Post by Terje Mathisen
White - pass through automatically.
This is what I've got. I'm thinking of changing the name to
karenlist" so it won't be so racist (joke).
Post by Terje Mathisen
Grey - require manual approval,
This is everything else.

increment good/bad counters until N
Post by Terje Mathisen
messages. Here I would guess that N = 3 is sufficient as long as they
are all of the same type. Maybe require something like
  (good >= 3) && ((good-bad)/all > 0.8)
???
Post by Terje Mathisen
Black - remove automatically
With one exception, I do not automatically reject anything. When I first
got into this, there were many messages - several per day - with the
word "Viagra" in the subject line. Those I rejected. Doesn't happen any
more - there are very few "bad" messages. I don't know why. Once in a
while, a long (50k or more) "binary" (no regular linefeeds) message
named "Confirmation of your order" or so. Malware, I assume. Only a few
that want to sell us a fake watch or a fake diploma. An occasional gal
who has seen our profile and wants to be our girlfriend... Used to be
much more... I can't predict the names. so can't have a "blacklist". I
just delete 'em by hand,
Post by Terje Mathisen
A former good poster who starts spamming would then be given an email
warning and moved to the grey list with initial good/bad counts of 0/0.
I think there is only one individual who has been permanently removed
from the whitelist. (not Rick - he is very cooperative!). He was
insulting to a member (Rod). If he'd posted something on-topic_he would
have been back on, but he just wanted to argue with me. There is no
point in arguing with a moderator... you might be right, but you won't
win. :)

Then there are certain messages from Pete, which are - at least
sometimes - "sorta" on-topic or "almost" on-topic. but which we don't
seem to want to see here. I'm hoping I can leave Pete on the whitelist
and ask him not to post them here and ask the rest of us to be tolerant.
One way or another I hope it'll work out...

Best,
Frank
Bernhard Schornak
2020-12-22 10:07:44 UTC
Permalink
olcott wrote:

_H_Hat:
[000005e6](01) 55 push ebp
[000005e7](02) 8bec mov ebp,esp
[000005e9](01) 51 push ecx
[000005ea](03) 8b4508 mov eax,[ebp+08]
[000005ed](01) 50 push eax
[000005ee](03) 8b4d08 mov ecx,[ebp+08]
[000005f1](01) 51 push ecx
[000005f2](05) e8effdffff call 000003e6
[000005f7](03) 83c408 add esp,+08
[000005fa](03) 8945fc mov [ebp-04],eax
[000005fd](04) 837dfc00 cmp dword [ebp-04],+00
[00000601](02) 7404 jz 00000607
[00000603](02) ebfe jmp 00000603
[00000605](02) eb01 jmp 00000608
[00000607](01) f4 hlt
[00000608](02) 8be5 mov esp,ebp
[0000060a](01) 5d pop ebp
[0000060b](01) c3 ret


0603 jumps to itself. Reduce to

_H-Hat:movl 0x0C(%esp), %eax
subl $0x08, %esp
movl %eax, 0x00(%esp)
movl %eax, 0x04(%esp)
call _WHATEVER_THAT_IS
testl %eax, %eax
je 0f
L00:jmp L00 # loop forever
0:hlt # CLI/STI?
addl $0x08, %esp
ret



As long as the code at 0x03E6 is unknown, it is impossible to tell
anything. _H_Hat itself does nothing ... except wasting clocks and
electrical power when the returned value is not zero.

The only thing I can see in your debug trace is that you would run
out of stack, if the debugger did not stop your attempts with this
error message before ESP reached your stack's bottom. Maybe a good
proof the debugger works well, but nothing else... ;)


Merry Winter Solstice!

Bernhard Schornak
olcott
2020-12-22 15:55:19 UTC
Permalink
Post by olcott
[000005e6](01)  55                  push ebp
[000005e7](02)  8bec                mov ebp,esp
[000005e9](01)  51                  push ecx
[000005ea](03)  8b4508              mov eax,[ebp+08]
[000005ed](01)  50                  push eax
[000005ee](03)  8b4d08              mov ecx,[ebp+08]
[000005f1](01)  51                  push ecx
[000005f2](05)  e8effdffff          call 000003e6
[000005f7](03)  83c408              add esp,+08
[000005fa](03)  8945fc              mov [ebp-04],eax
[000005fd](04)  837dfc00            cmp dword [ebp-04],+00
[00000601](02)  7404                jz 00000607
[00000603](02)  ebfe                jmp 00000603
[00000605](02)  eb01                jmp 00000608
[00000607](01)  f4                  hlt
[00000608](02)  8be5                mov esp,ebp
[0000060a](01)  5d                  pop ebp
[0000060b](01)  c3                  ret
0603 jumps to itself. Reduce to
_H-Hat:movl  0x0C(%esp), %eax
       subl  $0x08,      %esp
       movl  %eax,       0x00(%esp)
       movl  %eax,       0x04(%esp)
       call  _WHATEVER_THAT_IS
       testl %eax,       %eax
       je    0f
   L00:jmp   L00                      # loop forever
     0:hlt                            # CLI/STI?
       addl $0x08,       %esp
       ret
As long as the code at 0x03E6 is unknown, it is impossible to tell
anything. _H_Hat itself does nothing ... except wasting clocks and
electrical power when the returned value is not zero.
The only thing I can see in your debug trace is that you would run
out of stack,
That is the answer that I expected and confirms that I am correct.

I am using the x86 code that was translated from C as the machine
description language of a Universal Turing Machine equivalent. I wrote a
whole x86utm operating system for this purpose. This means that the
assumption is infinite memory and thus infinite stack.
Post by olcott
if the debugger did not stop your attempts with this
error message before ESP reached your stack's bottom. Maybe a good
proof the debugger works well, but nothing else... ;)
In my actual test case the debugger is a halt decider that recognizes
the pattern, (in my prior post) stops simulating this code and reports
not halting.

It turns out that all the halting problem proofs depend on the
assumption that such a halt decider is impossible.

Thanks for your help. The people in the other forums don't seem to have
a clue about the x86 language.
Post by olcott
Merry Winter Solstice!
Bernhard Schornak
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
Robert
2020-12-22 17:40:39 UTC
Permalink
Post by olcott
[000005e6](01)? 55????????????????? push ebp
[000005e7](02)? 8bec??????????????? mov ebp,esp
[000005e9](01)? 51????????????????? push ecx
[000005ea](03)? 8b4508????????????? mov eax,[ebp+08]
[000005ed](01)? 50????????????????? push eax
[000005ee](03)? 8b4d08????????????? mov ecx,[ebp+08]
[000005f1](01)? 51????????????????? push ecx
[000005f2](05)? e8effdffff????????? call 000003e6
[000005f7](03)? 83c408????????????? add esp,+08
[000005fa](03)? 8945fc????????????? mov [ebp-04],eax
[000005fd](04)? 837dfc00??????????? cmp dword [ebp-04],+00
[00000601](02)? 7404??????????????? jz 00000607
[00000603](02)? ebfe??????????????? jmp 00000603
[00000605](02)? eb01??????????????? jmp 00000608
[00000607](01)? f4????????????????? hlt
[00000608](02)? 8be5??????????????? mov esp,ebp
[0000060a](01)? 5d????????????????? pop ebp
[0000060b](01)? c3????????????????? ret
0603 jumps to itself. Reduce to
_H-Hat:movl? 0x0C(%esp), %eax
?????? subl? $0x08,????? %esp
?????? movl? %eax,?????? 0x00(%esp)
?????? movl? %eax,?????? 0x04(%esp)
?????? call? _WHATEVER_THAT_IS
?????? testl %eax,?????? %eax
?????? je??? 0f
?? L00:jmp?? L00????????????????????? # loop forever
???? 0:hlt??????????????????????????? # CLI/STI?
?????? addl $0x08,?????? %esp
?????? ret
As long as the code at 0x03E6 is unknown, it is impossible to tell
anything. _H_Hat itself does nothing ... except wasting clocks and
electrical power when the returned value is not zero.
The only thing I can see in your debug trace is that you would run
out of stack,
If it doesn't get caught in the infinite loop at 603, likely less
than one million before you hit the stack guard page.
Post by olcott
That is the answer that I expected and confirms that I am correct.
I am using the x86 code that was translated from C as the
machine description language of a Universal Turing Machine
equivalent. I wrote a whole x86utm operating system for
this purpose. This means that the assumption is infinite
memory and thus infinite stack.
??? I don't think any general-use compiler will emit a HLT
instruction. No need, this is a priviliged ring0 instruction
on modern x86 p-mode OSes.

-- Robert
olcott
2020-12-22 22:19:10 UTC
Permalink
Post by Robert
Post by olcott
[000005e6](01)? 55????????????????? push ebp
[000005e7](02)? 8bec??????????????? mov ebp,esp
[000005e9](01)? 51????????????????? push ecx
[000005ea](03)? 8b4508????????????? mov eax,[ebp+08]
[000005ed](01)? 50????????????????? push eax
[000005ee](03)? 8b4d08????????????? mov ecx,[ebp+08]
[000005f1](01)? 51????????????????? push ecx
[000005f2](05)? e8effdffff????????? call 000003e6
[000005f7](03)? 83c408????????????? add esp,+08
[000005fa](03)? 8945fc????????????? mov [ebp-04],eax
[000005fd](04)? 837dfc00??????????? cmp dword [ebp-04],+00
[00000601](02)? 7404??????????????? jz 00000607
[00000603](02)? ebfe??????????????? jmp 00000603
[00000605](02)? eb01??????????????? jmp 00000608
[00000607](01)? f4????????????????? hlt
[00000608](02)? 8be5??????????????? mov esp,ebp
[0000060a](01)? 5d????????????????? pop ebp
[0000060b](01)? c3????????????????? ret
0603 jumps to itself. Reduce to
_H-Hat:movl? 0x0C(%esp), %eax
?????? subl? $0x08,????? %esp
?????? movl? %eax,?????? 0x00(%esp)
?????? movl? %eax,?????? 0x04(%esp)
?????? call? _WHATEVER_THAT_IS
?????? testl %eax,?????? %eax
?????? je??? 0f
?? L00:jmp?? L00????????????????????? # loop forever
???? 0:hlt??????????????????????????? # CLI/STI?
?????? addl $0x08,?????? %esp
?????? ret
As long as the code at 0x03E6 is unknown, it is impossible to tell
anything. _H_Hat itself does nothing ... except wasting clocks and
electrical power when the returned value is not zero.
The only thing I can see in your debug trace is that you would run
out of stack,
If it doesn't get caught in the infinite loop at 603, likely less
than one million before you hit the stack guard page.
It is only this portion of the excution trace of H_Hat that I am
referring to. The second call 000003e6 from the same machine address
[000005f2] without any control flow instructions inbetween indicates
infinite recursion. Many of the comp.theory people could not understand
this.

---[000005e6](01) 55 push ebp
---[000005e7](02) 8bec mov ebp,esp
---[000005e9](01) 51 push ecx
---[000005ea](03) 8b4508 mov eax,[ebp+08]
---[000005ed](01) 50 push eax
---[000005ee](03) 8b4d08 mov ecx,[ebp+08]
---[000005f1](01) 51 push ecx
---[000005f2](05) e8effdffff call 000003e6 --CALL [000003e6]
---[000005e6](01) 55 push ebp
---[000005e7](02) 8bec mov ebp,esp
---[000005e9](01) 51 push ecx
---[000005ea](03) 8b4508 mov eax,[ebp+08]
---[000005ed](01) 50 push eax
---[000005ee](03) 8b4d08 mov ecx,[ebp+08]
---[000005f1](01) 51 push ecx
---[000005f2](05) e8effdffff call 000003e6 --CALL
[000003e6]
Post by Robert
Post by olcott
That is the answer that I expected and confirms that I am correct.
I am using the x86 code that was translated from C as the
machine description language of a Universal Turing Machine
equivalent. I wrote a whole x86utm operating system for
this purpose. This means that the assumption is infinite
memory and thus infinite stack.
??? I don't think any general-use compiler will emit a HLT
instruction. No need, this is a priviliged ring0 instruction
on modern x86 p-mode OSes.
-- Robert
I use it in the x86 emulator to indicate the that system definitely
stopped executing at this point. Before I used this instruction the
emulator tended to try to execute garbage. When it popped the return
from main() it had no where to go.
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
Bernhard Schornak
2020-12-23 03:33:01 UTC
Permalink
I use it in the x86 emulator to indicate the that system definitely stopped executing at this point.
Before I used this instruction the emulator tended to try to execute garbage. When it popped the
return from main() it had no where to go.
This is circular reasoning, because your thought depends on
the unproven assumption your x86 emulator throws the proper
results under any circumstance. Does it work with any other
emulator, as well?


Greetings from Augsburg

Bernhard Schornak

olcott
2020-12-17 02:15:25 UTC
Permalink
If Halts is really a pure function of two arguments, and it generates a
hierarchy of UTMs, then every call to Halts with the same two arguments
must generate exactly the same hierarchy of UTMs, and come to exactly
the same conclusion when it examines that hierarchy.
According to your reasoning the chairman of the board of a corporatation
is at the same place in the corporate hierarchy as the janitor.
You're forgetting that the hierarchy here is infinitely recursive due
to precise self-embedding: invocations of Halts(X, Y) contain
invocations of Halts(X, Y).
No you are forgetting that the pinnacle of the otherwise infinite
simulation hierarchy cuts off the subsequent simulations as soon as it
has seen enough of their execution trace to decide that it would be
otherwise infinite.

We are talking about an actual program that actually executes one step
at a time. Every time Halts executes it creates a process context that
has its own registers memory and stack. It then executes its input as a
separate virtual machine within this process context.

Then H_Hat executes Halts again and yet another process context is
created to execute yet another virtual machine. Every time this occurs
the number of process contexts and virtual machine increases to some
finite number.
So for the corporation analogy not to be a strawman, we have to make
the corporation likewise infinitely nested, and we have to have
identical copies of the janitor and chairman at various levels.
Infinity is cut off at three.
The first invocation of Halts() is the pinnacle of the hierarchy and
every invocation after that is subordinate to the preceding one.
Every recursive invocation is indistinguishable.
Bullshit each one has a unique process ID.
Just like the suffix of
an infinite list of identical ducks is exactly the same as the original
list.
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
olcott
2020-12-17 05:10:29 UTC
Permalink
If the progression is caused by an infinite recursion of a function
with the same paraemters, then all of the simulation levels are
indistinguishable. No UTM knows how many levels are above,
and each one has the same number of identical levels below.
That's it.
If we allowed the infinite recursion to infinitely recur this would be
true. We cut off the otherwise infinite recursion at three.
While it is possible to break that, by doing so you break the
premise that we have a pure function.
Halts() is a function of its inputs.
Unfortunately "inputs" no longer refers to "those argument things
between the parentheses that we are painstakingly keeping the same".
I think that may be simply because you have a narrow minded view of
inputs as some fixed sized set of objects.
Oh, I specifically do not. Above, I'm demonstrating flexibility and
insight; I'm recognizing the new situation that there are more inputs
than just the arguments to those function parameters, and I'm
acknowleding that those are bona fide inputs.
Great !
However, the proofs that are used to demonstrate the nonexistence of a
universal halting aglorithms specify certain functions which have
certain inputs, and only those inputs, and are generally pure.
The dynamically generated execution trace of the simulation of H_Hat and
its input are what Halts bases its halting decision on. That the
conventiopal proof may have incorectly assumed static analysis is merely
a false assumption on its part.
In your coding simulation of those functions, you cannot be adding
additional hidden inputs to the programming language functions
which are supposed to correspond to the proof's functions.
The only thing that I actually need to make a correct halting decision
is the sequence of user specified x86 instructions that are simulated by
the halt decider. A simulator would have access to this sequence.
You are ruling out all dynamically generated inputs.
Well, not me, personally, but the proofs.
The halting proofs use certain functions and they specify what exactly
those functions mean. You're changing what the functions mean, so your
code execution produces situations that don't pertain to the original
functions in the proof.
The halting proofs merely falsely assume static rather than dynamic
analysis. That is their mistake not mine.
--
Copyright 2020 Pete Olcott

"Great spirits have always encountered violent opposition from mediocre
minds." Einstein
Kaz Kylheku
2020-12-17 16:06:16 UTC
Permalink
["Followup-To:" header set to comp.theory.]
Post by olcott
If the progression is caused by an infinite recursion of a function
with the same paraemters, then all of the simulation levels are
indistinguishable. No UTM knows how many levels are above,
and each one has the same number of identical levels below.
That's it.
If we allowed the infinite recursion to infinitely recur this would be
true. We cut off the otherwise infinite recursion at three.
While it is possible to break that, by doing so you break the
premise that we have a pure function.
Halts() is a function of its inputs.
Unfortunately "inputs" no longer refers to "those argument things
between the parentheses that we are painstakingly keeping the same".
I think that may be simply because you have a narrow minded view of
inputs as some fixed sized set of objects.
Oh, I specifically do not. Above, I'm demonstrating flexibility and
insight; I'm recognizing the new situation that there are more inputs
than just the arguments to those function parameters, and I'm
acknowleding that those are bona fide inputs.
Great !
However, the proofs that are used to demonstrate the nonexistence of a
universal halting aglorithms specify certain functions which have
certain inputs, and only those inputs, and are generally pure.
The dynamically generated execution trace of the simulation of H_Hat and
its input are what Halts bases its halting decision on. That the
conventiopal proof may have incorectly assumed static analysis is merely
a false assumption on its part.
The conventional proofs have no such problem. They place absolutely no
restrictions on Halts other than that it have two arguments, return a
Boolean indication and be a function. Within these constraints, no
technique, be it "static" or "dynamic" is off the table.

The proofs show that no definition of Halts, under their constraints,
can be a universal halting decider. Because Halts is constrained in such
a way that it can be comprised of any Turing machine (there is an
equivalence between pure funcions and Turing machines), the proofs show
that no Turing machine can be a universal halting decider.

Your apparatus contains contains functions which meet a different,
informal definition of the word "function" denoting an imperative
procedure that returns a value, that may access (and even mutate) state
information not contained in its arguments.

Your claim is that your apparatus is an embodiment of the entities
described in the proof, and therefore properties of the apparatus speak
to the proof. This claim is false, and is to a large extent based
on equivocation over word semantics: changing between the definition of
"function" in mathematics jargon, and the definition of "function" in
the jargon of certain programming languages.

Equivocation is one of the most embarrassing errors of inference that
man can make: not pinning down the meanings of words.

The assumptions which a proof makes are its privilege, and they
contribute to its definition. If you have to change them in order to
challenge the proof, you're attacking a strawman caricature of the proof,
not the real one.
Post by olcott
The halting proofs merely falsely assume static rather than dynamic
analysis. That is their mistake not mine.
No such words appear in any proof you can cite from any credible
textbook or paper. All proper presentations of the proof allow the
decider simply be an arbitrary recursive funtion, which allows it to be
any Turing machine.

(Quite literally, the decider function can encode the arguments P and I
onto a tape of symbols, and feed it to an actual Universal Turing Machine.)

The techniques you are using do not allow this; you could not translate
your simulation approach such that Halts encodes P and I onto a tape and
just launches a UTM, and then (if the UTM halts) collects the return
value from the tape.

Your approach would require the multiple invocations of that UTM to be
diddled by an interfering process into incorrectly producing different
results.
--
TXR Programming Language: http://nongnu.org/txr
Loading...