olcott <NoOne@NoWhere.com> writes:
I have trivial implementations of the functions you are hiding that give exactly those results. I don't think I've "defeated Rice" but perhaps
you should worry that someone else will come up with the H and H2 I have
and publish first!
olcott <NoOne@NoWhere.com> writes:
On 7/30/2021 9:09 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
I have trivial implementations of the functions you are hiding that give >>> exactly those results. I don't think I've "defeated Rice" but perhaps
you should worry that someone else will come up with the H and H2 I have >>> and publish first!
Yet those trivial implementations do not have complete execution
traces showing that a partial halt decider does correctly decide the
halt status of its input.
My point was that what you posted proves nothing. You need to post code
and then prove that it decides a "non-trivial" property of Turing
machines.
machine stack stack machine assembly
address address data code language
======== ======== ======== ========= =============
...[00000cd2][001017ed][00000000] 55 push ebp
No execution trace can prove what you claimed either. If you want to
know why, just ask. I think you need to learn Rice's theorem all over
again.
olcott <NoOne@NoWhere.com> writes:
On 7/30/2021 1:27 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 7/30/2021 9:09 AM, Ben Bacarisse wrote:My point was that what you posted proves nothing. You need to post code >>> and then prove that it decides a "non-trivial" property of Turing
olcott <NoOne@NoWhere.com> writes:
I have trivial implementations of the functions you are hiding that give >>>>> exactly those results. I don't think I've "defeated Rice" but perhaps >>>>> you should worry that someone else will come up with the H and H2 I have >>>>> and publish first!
Yet those trivial implementations do not have complete execution
traces showing that a partial halt decider does correctly decide the
halt status of its input.
machines.
In prior conversations long ago it has been established that dividing
inputs having pathological self-reference(Olcott 2004) from ones that
do not does refute Rice's theorem.
Then go ahead and post the code and the proof that it decides a
non-trivial property of computations (note the plural).
A very careful study on the x86 assembly language execution trace does
prove that H/H2 does decide its inputs correctly.
A trace of some code correctly deciding some non-trivial property of
some other code does not refute Rice's theorem. You need to lean the theorem.
machine stack stack machine assemblyNo execution trace can prove what you claimed either. If you want to
address address data code language
======== ======== ======== ========= =============
...[00000cd2][001017ed][00000000] 55 push ebp
know why, just ask. I think you need to learn Rice's theorem all over
again.
Why do you believe that an execution trace does not prove that H/H2
did decide their inputs correctly?
It does not matter what the trace shows. The trace can show some code deciding absolutely anything, either correctly or incorrectly, and still
not refute Rice's theorem. Rice's theorem is about the decidability of
sets.
On 2021-07-30 11:11, olcott wrote:
On 7/30/2021 12:06 PM, André G. Isaak wrote:
On 2021-07-30 07:46, olcott wrote:
int Simulate(u32 P, u32 I)
{
((int(*)(int))P)(I);
return 1;
}
Why is this function called 'Simulate'?
There's nothing remotely resembling simulation going on there. The
function is simply calling the function pointer that was passed to
it. That's execution, not simulation.
It is the simplest possible function that is computationally
equivalent to a simulation. Since every single instruction of the
entire x86utm operating system is simulated the name is also literally
true.
Well, no, it isn't. The name 'simulator' suggests that this function
performs simulation. From what you suggest above, 'simulator' is,
itself, being simulated. That's something altogether different which
makes the name incredibly misleading.
Which raises all sorts of questions regarding your previous usage of
the term 'simulate'. Does your 'simulating decider' actually involve
simulation at all?
André
The x86utm operating system is based on an x86 emulator that has
decades of development.
That doesn't answer my question at all (and I don't know why you think
anyone cares how many decades something has been under development).
You consistently referred to your H as a 'simulating halt decider', but
every time you present code snippets of H it shows H making a direct
call to its input rather than invoking any kind of simulator.
So is H actually the thing doing the simulation, or is H simply *being* simulated in much the same way as your so-called 'Simulate' function
above is?
André
On Friday, 30 July 2021 at 23:45:39 UTC+1, olcott wrote:
So we have two halt deciders, H1 and H2.
The P of int main(){ P(P); } reaches its final state.
The input to H(P,P) cannot possibly reach its final state.
PSR_Decider() sees this difference.
PSR_Decider() detects that inputs have the Pathological
Self-reference(Olcott 2004) property.
H1 is confounded by H1_Hat, H2 is confounded by H2_Hat.
However H1 classifies H2_Hat correctly, and H2 classifies H1_Hat
correctly.
So at first sight this seems promising. We can run H1 and H2 on the
same input, see if they match, and if there is a disgreement, detect pathological self reference.
The snag is that you've got to show that "pathological self reference"
is the only input that confounds your two deciders.
On 2021-07-30 17:34, olcott wrote:
On 7/30/2021 6:01 PM, André G. Isaak wrote:
On 2021-07-30 16:43, olcott wrote:
On 7/30/2021 5:13 PM, André G. Isaak wrote:
On 2021-07-30 15:53, olcott wrote:
On 7/30/2021 4:46 PM, André G. Isaak wrote:
On 2021-07-30 11:11, olcott wrote:
On 7/30/2021 12:06 PM, André G. Isaak wrote:
On 2021-07-30 07:46, olcott wrote:
int Simulate(u32 P, u32 I)
{
((int(*)(int))P)(I);
return 1;
}
Why is this function called 'Simulate'?
There's nothing remotely resembling simulation going on there. >>>>>>>>> The function is simply calling the function pointer that was >>>>>>>>> passed to it. That's execution, not simulation.
It is the simplest possible function that is computationally
equivalent to a simulation. Since every single instruction of
the entire x86utm operating system is simulated the name is also >>>>>>>> literally true.
Well, no, it isn't. The name 'simulator' suggests that this
function performs simulation. From what you suggest above,
'simulator' is, itself, being simulated. That's something
altogether different which makes the name incredibly misleading. >>>>>>>
Then think of it as being named Big_Freds_Pizza(), the point is
that my code seems to defeat Rice.
Didn't you make a claim that you could fool it?
Which raises all sorts of questions regarding your previous
usage of the term 'simulate'. Does your 'simulating decider' >>>>>>>>> actually involve simulation at all?
André
The x86utm operating system is based on an x86 emulator that has >>>>>>>> decades of development.
That doesn't answer my question at all (and I don't know why you >>>>>>> think anyone cares how many decades something has been under
development).
You consistently referred to your H as a 'simulating halt
decider', but every time you present code snippets of H it shows >>>>>>> H making a direct call to its input rather than invoking any kind >>>>>>> of simulator.
So is H actually the thing doing the simulation, or is H simply
*being* simulated in much the same way as your so-called
'Simulate' function above is?
André
Why can't you seem to stay focused on the key point at hand?
Why do you diverge off on inconsequential trivialities?
Because it *isn't* an inconsequential triviality. I'm trying to
figure out the actual architecture of your system, and you are
being deliberately unhelpful.
Just because you don't understand why a particular question is
being asked isn't a good reason to refuse to answer it.
int Simulate(u32 P, u32 I)
{
((int(*)(int))P)(I);
return 1;
}
// H and H2 are partial halt deciders
u32 PSR_Decider(u32 P, u32 I)
{
u32 Input_Halts1 = H((u32)P, (u32)I);
u32 Input_Halts2 = H2((u32)Simulate, (u32)P, (u32)I);
Output("Input_Halts1 = ", Input_Halts1);
Output("Input_Halts2 = ", Input_Halts2);
if (Input_Halts1 != Input_Halts2)
return 1;
return 0;
}
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
int main()
{
Output("PSR_Decider = ", PSR_Decider((u32)P, (u32)P));
}
The point of this post is whether or not my PSR_Decider() is correct.
The name that I choose for my functions is not related to that.
I'm not asking about the name. I'm asking whether your "simulating
halt decider" H actually performs any simulation or whether it is
simply being simulated as you claim that 'Simulate' above is.
And once again you've failed to answer. It's a simple straightforward
question. It can be answered in a single short sentence. So why not
simply answer it rather than coming up with excuses for not answering
it?
I have aready answered this many hundreds of times, asking the same
quesition again seems quite disingenuous. Here is an additional detail
that I have only provided about a dozen times:
This is *how* H simulates its slave process one x86 instruction
at-a-time.
u32 DebugStep(Registers* master_state,
Registers* slave_state,
Decoded_Line_Of_Code* decoded) {}
master_state has the machine register values of H and slave_state has
the machine register values of P. decoded has the simplified machine
code that was executed.
That doesn't answer my question, though. I am interested in *where* the simulation actually takes place. Does H actually initialize the
simulation
and set up these state records, or is this something done by
your "operating system".
When you call H(P, P) does the copy of H inside P set up a second set of register state records and initialize a new simulation or not?
Also, why would a simulation of P require *two* sets of register states?
It should only require the state of the machine being simulated.
I can guarantee you that if you ever present your work in a *real*
academic environment, you will be asked all sorts of questions of
which you might not immediately see the relevance, and you *will*
be expected to answer them.
If you think that you can fool my Pathological
self-reference(Olcott 2004) decider go ahead any try this. If it
is impossible to fool it then that proves that it is correct.
How can anyone possible answer this?
You've apparently now got two different halt decider, H1 and H2.
You haven't provided even the vaguest description of what these
things do or how they differ from one another.
So before you ever read what I say you first make sure to forget
everything else that we have discussed.
The P of int main(){ P(P); } reaches its final state.
The input to H(P,P) cannot possibly reach its final state.
PSR_Decider() sees this difference.
So why are you using a different halt decider for each case? What's
the different between H1 and H2? And why do you need Simulate at all?
Why not just call H2(P, P) given that your 'simulate' is no more than
a wrapper for a function call.
H2 take three params so that it can execute the equivalent of
int main(){ P(P); }
P(P) is already the equivalent of int main() { P(P); }.
So H2(Simulate, P, P)
should return the exact same answer as
H1(P, P)
given that 'Simulate' is just a wrapper for P(P).
How is it that H2 *correctly* determines that P(P) does halt
P reaches its final state.
But how exactly is it that H2 gets this answer right when H1 gets the
answer wrong?
(or that Simulate(P, P) doesn't halt)
Simulate does halt.
Yes. That was a typo. I already corrected it.
whereas H1 incorrectly claims that P(P) doesn't halt?
H1 correctly determines that its input cannot possibly ever halt
unless H1 aborts its simulation of P, thus perfectly matching the
never halts criteria.
int main(){ P(P); } does halt.
Yes. I get that. What I don't get is how your H2 manages to correctly determine this if it is using the same broken halting criteria as H1.
In both cases you have P(P) appearing as an input to your halt decider
rather than as an independent computation.
André
olcott <NoOne@NoWhere.com> writes:
On 7/30/2021 3:47 PM, Ben Bacarisse wrote:
It does not matter what the trace shows. The trace can show some code
deciding absolutely anything, either correctly or incorrectly, and still >>> not refute Rice's theorem. Rice's theorem is about the decidability of
sets.
If there exists no undecidable counter-example showing the Rice's
theorem is true then it would seem that Rice's theorem would have no
basis.
There is no such thing as an undecidable example (singular). But I
think you now agree with me: nothing you have posted says anything about
the soundness of the theorem. The "if ... then it would seem..."
pattern suggest you know you haven't proved anything.
I won't even try to understand what a "counter-example showing the
Rice's theorem is true" is. If you read a book on this topic (properly,
not just scanning it), you'd pick the language and might end up knowing
how to say what you mean.
I've accused you before of writing "math poems" when you try to use
symbolic notation, but I've just realised you do it with words as well.
You don't really know what "decidable", "counter-example" and "Rice's theorem" mean.
You don't even know what mathematicians mean by "true",
so when you string them all together like this, the reader has to
analyse the poem to see how you are using these words as metaphors. If
the reader can do that, they will know what you mean.
olcott <NoOne@NoWhere.com> writes:
On 8/1/2021 5:22 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 7/31/2021 5:17 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 7/30/2021 3:47 PM, Ben Bacarisse wrote:There is no such thing as an undecidable example (singular). But I
It does not matter what the trace shows. The trace can show some code >>>>>>> deciding absolutely anything, either correctly or incorrectly, and still
not refute Rice's theorem. Rice's theorem is about the decidability of >>>>>>> sets.
If there exists no undecidable counter-example showing the Rice's
theorem is true then it would seem that Rice's theorem would have no >>>>>> basis.
think you now agree with me: nothing you have posted says anything about >>>>> the soundness of the theorem. The "if ... then it would seem..."
pattern suggest you know you haven't proved anything.
// Simplified Linz Ĥ (Linz:1990:319)
// Strachey(1965) CPL translated to C
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
int main()
{
Output("Input_Halts = ", H((u32)P, (u32)P));
}
I call the above an HP counter example instance.
I can't stop you. Is the fact that a key part of the program is missing >>> what makes it an "HP counter example instance"?
What the rest of the world calls "HP instances" are actual programs
(plus any required input). But as I've said, you are using words to
suggest things, poetically, in the reader's mind, not to communicate a
precise technical meaning.
And (according to you) the technical name for this Ĥ ⟨Ĥ⟩ is the cases >> that Ĥ gets wrong. That sure doesn't seem like a formal defintion to
me.
It's not. The formal definition of the case Ĥ ⟨Ĥ⟩ is Ĥ ⟨Ĥ⟩.
Ĥ.q0 wM ⊢* Ĥ.qx wM wM ⊢* Ĥ.qy ∞
if M applied to wM halts, and
Ĥ.q0 wM ⊢* Ĥ.qx wM wM ⊢* Ĥ.qn
if M applied to wM does not halt
As you keep telling us, for your actual Ĥ,
Ĥ.q0 ⟨Ĥ⟩ ⊢* Ĥ.qx ⟨Ĥ⟩ ⟨Ĥ⟩ ⊢* Ĥ.qn
which is fine. Nothing contradictory or paradoxical about that result.
It's just how you've chosen to write Ĥ. The part you get wrong is
thinking (and claiming) that your Ĥ says something about Linz's proof.
For a TM to be like Linz's Ĥ (even for the one case Ĥ ⟨Ĥ⟩) the above should happen only
if Ĥ applied to ⟨Ĥ⟩ does not halt.
For the proof to be wrong, you would need to have what you once falsely claimed to have: an Ĥ that, at least for this one case, behaves as Linz
(and everyone else) says is impossible.
On 03/08/2021 03:26, olcott wrote:
On 8/2/2021 8:58 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/2/2021 7:25 PM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
On 8/2/2021 11:32 AM, Ben Bacarisse wrote:I can't stop you using words like this. But if you want to write
olcott <NoOne@NoWhere.com> writes:
On 8/1/2021 5:22 AM, Ben Bacarisse wrote:
olcott <NoOne@NoWhere.com> writes:
It's not. The formal definition of the case Ĥ ⟨Ĥ⟩ is Ĥ ⟨Ĥ⟩.// Simplified Linz Ĥ (Linz:1990:319)
// Strachey(1965) CPL translated to C
void P(u32 x)
{
if (H(x, x))
HERE: goto HERE;
}
int main()
{
Output("Input_Halts = ", H((u32)P, (u32)P));
}
I call the above an HP counter example instance.
I can't stop you. Is the fact that a key part of the program >>>>>>>>> is missing
what makes it an "HP counter example instance"?
What the rest of the world calls "HP instances" are actual
programs
(plus any required input). But as I've said, you are using >>>>>>>>> words to
suggest things, poetically, in the reader's mind, not to
communicate a
precise technical meaning.
And (according to you) the technical name for this Ĥ ⟨Ĥ⟩ is the >>>>>>>> cases
that Ĥ gets wrong. That sure doesn't seem like a formal
defintion to
me.
What is the name of the category where a TM/input pair: (X,Y) is
undecidable for X? It seems to make the most sense to simply calls >>>>>> this an undecidable TM/input pair.
clearly so that experts can understand you, you would need to learn
what
the words you use mean to other people.
But part of me is happy for you keep misusing terms like this. It
makes
it obvious that you don't really know how to say what you mean, so
naive
readers are less likely to be taken in.
I asked you for a correction, simply ignoring this request is not an
honest dialogue.
You asked me for the name of a category that is, at best, vague for me
because you described the category using technical words in a way that's >>> not usual.
My best guess for "undecidable TM/input pair for X" is "a halting
problem instance that X gets wrong".
Surely there is a better way to say it than that.
"Nemesis" inputs... That should be emotive enough for you, but still conveys the impression that the input is constructed to "defeat" the potential decider - like pretending that the decider is a superhero and
every superhero has to have (at least) one nemesis, or things would be boring!
But Ben's "inputs the decider gets wrong" is ok too!
I've given you this alternative
before, but you don't like it. Maybe you just want a more emotive or
poetic term. Shall we call them "spawn of the devil inputs for X"?
But step one is for you to read a book so you know what decidable means
(in this context). Ideally, you will see from the book that the term is >>> not ideal, and you'll switch to talking about recursive sets. Shall we >>> do that? It might help.
It seems to me that saying that it is a TM/input pair such that both
Boolean values are incorrect final states for the decision criteria
gets closer to the philosophical underpinnings of the issue.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 379 |
Nodes: | 16 (2 / 14) |
Uptime: | 67:06:46 |
Calls: | 8,084 |
Calls today: | 2 |
Files: | 13,068 |
Messages: | 5,849,427 |