Re: The proof that I was referring to is on the website
From: The Ghost In The Machine (ewill_at_aurigae.athghost7038suus.net)
Date: 08/15/04
- Next message: The Ghost In The Machine: "Re: The proof that I was referring to is on the website"
- Previous message: Matt Timmermans: "Re: Dynamic Programming Problem"
- In reply to: Peter Olcott: "Re: The proof that I was referring to is on the website"
- Next in thread: Peter Olcott: "Re: The proof that I was referring to is on the website"
- Reply: Peter Olcott: "Re: The proof that I was referring to is on the website"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Sun, 15 Aug 2004 18:30:55 GMT
In sci.logic, Peter Olcott
<olcott@worldnet.att.net>
wrote
on Sun, 15 Aug 2004 03:58:46 GMT
<WbBTc.209641$OB3.108770@bgtnsc05-news.ops.worldnet.att.net>:
>
> "The Ghost In The Machine" <ewill@aurigae.athghost7038suus.net>
> wrote in message news:ia12v1-q8o.ln1@lexi2.athghost7038suus.net...
[snip for brevity -- halting problem discussion]
>>
>> But that's exactly what Turing proved, by constructing
>> a LoopIfHalts given a machine implementing WillHalt that
>> can't be evaluated by (that particular variant of) WillHalt.
>
> Yet with my new whiz bang updated version of WillHalt, now
> LoopIfHalts and every other TM in the universal set of TMs
> can be correctly evaluated. www.halting-problem.com
Assuming that WillHalt can figure out that it's being
embedded (or one of its brothers is being embedded)
in the program under test -- and that your odd restriction
that there be no transitions out of the Halting state has
any meaning at all. It turns out LoopIfHalts can be implemented
as follows:
startstate: S
stateset: {S_i} union WillHalt(stateset) union {L,H}
haltset: {H}
transitionfunction:
Handwaving here, sorry. The general idea is
that LoopIfHalts will replace the second encoded
parameter with an encoding based on its first and
second encoding parameter -- the details depend on
the encoding -- and then transition into the (mostly)
embedded WillHalt's start state. The actual haltset
(but not the states therein) of WillHalt has been
discarded during the conversion of WillHalt to
LoopIfHalts (this conversion is a 1-1 non-onto
mapping of machine to machine), of course, but by
the time LoopIfHalts gets to the old end state, the
"0" or "1" has been written, and can be easily read.
If "1", the machine transitions to loop in L. If "0",
the machine transitions to halt in H.
WillHalt fails again.
I've already noted of course that there are many varieties of
WillHalt, assuming WillHalt exists at all; in the programming
language vernacular one can do such replacements as
MOV 0,Ri = XOR Ri, Ri or SUB Ri, Ri
and flip comparisons:
Jnz Ri,Label = Jz Ri,PC+2; JMP Ri,Label
CMP Ri, Rj; Jge Label = CMP Rj, Ri; Jle Label
Such "peephole" optimizations are well-known to compiler writers.
In the Turing machine realm, things aren't much
better. One can add idler states as one wishes (the TM
equivalent of "NOP"), by simply defining a transition
on any input without moving the head and splicing in the
new state. In a block-copy algorithm one might replace
a copy-by-one implementation using at least N states
(where N is the number of alphabetic symbols) with a
copy-by-two implementation using at least N(N+1) states.
There's probably other instances but I'm not all that up
on writing Turing machines. :-)
But even without these tricks, your analysis has a fatal flaw
anyway. WillHalt isn't even running in the emulator; it's
been transmogrified to something else (namely, LoopIfHalts).
WillHalt's final state is just another state in the transmogrified
machine. Is WillHalt smart enough to find itself? I doubt it!
To find itself it would have to *know* itself 100%, in some fashion,
and that's not all that possible-looking either, as anyone
who's tried to put the md5sum of an archive into the archive
knows.
As for "called from two different contexts" -- Turing
machines don't have contexts (merely state) and cannot be
called from one another, merely embedded. The programming
language equivalent is -Wl,-a,archive, which is an
occasionally-used link-time flag [*] to indicate that
every -l<name> reference should be dredged in from the .a
(archive) files, rather than the system doing the more
normal dynamic-load (.so).
[rest snipped]
[*] in Unix and Linux systems, anyway. There's an equivalent in Windows
regarding .DLL and .LIB but I don't know what it is offhand.
-- #191, ewill3@earthlink.net It's still legal to go .sigless.
- Next message: The Ghost In The Machine: "Re: The proof that I was referring to is on the website"
- Previous message: Matt Timmermans: "Re: Dynamic Programming Problem"
- In reply to: Peter Olcott: "Re: The proof that I was referring to is on the website"
- Next in thread: Peter Olcott: "Re: The proof that I was referring to is on the website"
- Reply: Peter Olcott: "Re: The proof that I was referring to is on the website"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|