Now we have reached a much more precise point, and I think your latest
reply exposes the exact logical issue.
You write:
HHH does correctly determine that its input DD does
specify a non-halting sequence of configurations if
(a) The words Professor Sipser agreed to are correct
(b) HHH derives this result by the application of
correct finite string transformation rules to its input.
But (a) and (b) are not sufficient to establish your conclusion.
The statement you attribute to Professor Sipser is:
If simulating halt decider H correctly simulates its
input D until H correctly determines that its simulated D
would never stop running unless aborted then
H can abort its simulation of D and correctly report that D
specifies a non-halting sequence of configurations.
I accept this statement.
But its antecedent explicitly contains:
H correctly determines ...
That is a semantic correctness condition. It does not say that whenever
H observes recursive simulation, H has thereby correctly determined that
its input specifies a non-halting computation.
So quoting this statement cannot establish that your particular function:
Needs_To_Be_Aborted_HH(execution_trace)
satisfies that antecedent for DD.
That still has to be proved.
In fact, your latest definition makes the problem especially clear.
You propose that the correct question is:
Does the finite string input DD to HHH specify a finite
sequence of configurations that will terminate normally
without needing to be aborted?
Fine.
Now we must identify which sequence of configurations is meant.
HHH starts with DD and produces something like:
simulate DD
; DD reaches HHH(DD)-> DD reaches HHH(DD)
; simulate DD
-> simulate DD
-> ...
You say HHH recognizes that this sequence "would never stop running
unless aborted".
I agree.
Therefore HHH may correctly make the statement:
This simulation sequence will not terminate unless I abort it.
But you then want to infer:
Therefore my input DD specifies a non-halting computation.
That inference is precisely what still requires proof.
Your appeal to Post does not supply it.
Applying correct finite string transformation rules guarantees that each transformation is legitimate. It does not guarantee that every semantic conclusion drawn from a finite prefix of those transformations is correct.
For example, suppose I correctly simulate a program for one billion
steps. Every single transformation can be perfectly correct. If I then say:
"It has not halted yet, therefore it will never halt"
the correctness of all preceding transformations does not make that inference correct.
You therefore need two different things:
1. correct simulation;
2. a correct inference rule establishing nontermination.
Your condition (b) appears to conflate them.
And this distinction is especially important because you explicitly say
that HHH has a limited domain.
If your claim is merely:
HHH decides nontermination for some restricted class of
computations for which Needs_To_Be_Aborted_HH provides
a sound nontermination test,
then there is no conflict whatsoever with the halting theorem.
Many restricted classes of programs have decidable termination.
But if your claim is that this defeats the diagonal halting argument,
then the difficult part is proving that DD belongs to that restricted
domain in the semantic sense required by the theorem.
And here your distinction between "what HHH actually sees" and a direct execution of DD does not help.
You explicitly acknowledge that DD can behave differently "within pathological self-reference (PSR)" and "without PSR", and then say that
HHH is accountable only for the behavior it actually sees.
That is a very important admission.
If:
behavior(DD under HHH's simulation context)
and:
behavior(DD in the computation whose halting is being asked about)
are different behaviors, then HHH is simply answering a different question.
A halt decider is not defined as:
"Tell me whether the simulation strategy used internally by H
would have to be aborted."
It is defined relative to the computation represented by its program/
input pair.
This also explains why your statement:
int main()
{
DD(); // is not what HHH actually sees.
}
does not resolve anything.
Of course it is not what HHH internally sees.
A simulator sees an encoded representation and simulated configurations. That is true of every universal simulator.
The required property is not literal identity between the simulator's internal state and the simulated machine's physical execution.
The required property is semantic fidelity:
simulation(P, x) corresponds to computation(P, x).
function LoopIfYouSayItHalts (bool YouSayItHalts):
if YouSayItHalts () then
while true do {}
else
return false;
Does this program Halt?
(Your (YES or NO) answer is to be considered
translated to Boolean as the function's input
parameter)
Please ONLY PROVIDE CORRECT ANSWERS!
If you explicitly deny that correspondence for DD by saying that DD
under PSR has different behavior from DD without PSR, then you cannot
use the behavior under PSR to decide the behavior without PSR.
You have separated the two computations yourself.
There is another important point.
You write:
When HHH sees a conditional branch then HHH does not abort.
That makes the concrete implementation relevant.
DD itself contains a conditional branch:
if (Halt_Status)
goto HERE;
Therefore, if your abort criterion nevertheless fires before that branch
can be reached
because the simulated DD is blocked inside the recursive
simulated HHH(DD), then the criterion is detecting a property of the
nested simulation structure.
That may be a perfectly legitimate and useful property to detect.
But again:
"this nested simulation will recurse unless aborted"
is not automatically equivalent to:
"the computation denoted by the original DD is non-halting."
You need a theorem establishing that equivalence for every member of
your claimed domain.
The Sipser statement does not provide that theorem because it explicitly assumes that H has already "correctly determined" the relevant nontermination property.
In logical form, the statement is essentially:
IF H correctly determines P,
THEN H may report P.
That is true.
But it cannot be used to establish:
H correctly determines P.
Doing that would be circular.
And this is why the exact wording "would never stop running unless
aborted" does not change the issue.
I agree that your recursive simulation would never stop running unless aborted.
I agree that HHH can abort that simulation.
I agree that this can be derived through finite operations on finite representations.
None of those are the disputed step.
The disputed step is:
recursive simulation would never stop unless aborted
therefore
the original computation whose halting status is being
decided is non-halting.
You need to establish that implication independently.
There is a very simple way to settle this without any further discussion about Church, Turing, Post, Sipser, or terminology.
State the specification of HHH formally as a relation between its input
and its output.
For example:
HHH(P) = 1 iff ______________________________
HHH(P) = 0 iff ______________________________
Then state exactly what computation the right-hand side denotes.
Not "what HHH sees", not "what people expect it to look at", and not
"unless aborted".
Just identify the mathematical object whose termination the returned bit describes.
Then we can apply that specification to DD.
If HHH's result describes the termination behavior of DD itself, diagonalization applies.
If HHH's result instead describes whether HHH's internal simulation of
DD must be aborted, then HHH may very well compute that property, but it
is not deciding the same halting predicate.
That distinction is now the entire issue.--
| Sysop: | DaiTengu |
|---|---|
| Location: | Appleton, WI |
| Users: | 1,142 |
| Nodes: | 10 (0 / 10) |
| Uptime: | 93:07:27 |
| Calls: | 14,704 |
| Calls today: | 2 |
| Files: | 186,497 |
| D/L today: |
2,349 files (779M bytes) |
| Messages: | 2,551,657 |