The notion of a simulating termination analyzer is examined at the concrete level of pairs of C functions. This is similar to AProVE: Non-Termination Witnesses for C Programs: The termination status decision is made on the basis of the dynamic behavior of the input. This paper explores what happens when a simulating termination analyzer is applied to an input that calls itself.
Simulating Termination Analyzer HHH correctly simulates its input until:
(a) Detects a non-terminating behavior pattern: abort simulation and return 0.
(b) Simulated input reaches its simulated "return" statement: return 1.
int DD()
{
int Halt_Status = HHH(DD);
if (Halt_Status)
HERE: goto HERE;
return Halt_Status;
}
Can you see that DD correctly simulated by HHH demonstrates the recursive simulation non halting behavior pattern that cannot possibly reach its own "if" statement?
Simulating Termination Analyzer HHH correctly simulates its input until:
(a) Detects a non-terminating behavior pattern: abort simulation and return 0.
(b) Simulated input reaches its simulated "return" statement: return 1.
int DD()
{
int Halt_Status = HHH(DD);
if (Halt_Status)
HERE: goto HERE;
return Halt_Status;
}
Can you see that DD correctly simulated by HHH demonstrates the recursive simulation non halting behavior pattern that cannot possibly reach its own "if" statement?