Certification Problem
Input (TPDB TRS_Standard/EEG_IJCAR_12/velroyen-nonloop-ConvLower_c)
The rewrite relation of the following TRS is considered.
while(true,s(s(s(i)))) |
→ |
while(gt(s(s(s(i))),s(0)),f(s(s(s(i))))) |
(1) |
f(i) |
→ |
if(neq(i,s(s(0))),i) |
(2) |
gt(s(x),s(y)) |
→ |
gt(x,y) |
(3) |
gt(s(x),0) |
→ |
true |
(4) |
gt(0,0) |
→ |
false |
(5) |
gt(0,s(y)) |
→ |
false |
(6) |
if(true,i) |
→ |
plus(i,s(0)) |
(7) |
if(false,i) |
→ |
i |
(8) |
neq(s(x),s(y)) |
→ |
neq(x,y) |
(9) |
neq(0,0) |
→ |
false |
(10) |
neq(0,s(y)) |
→ |
true |
(11) |
neq(s(x),0) |
→ |
true |
(12) |
plus(s(x),y) |
→ |
plus(x,s(y)) |
(13) |
plus(0,y) |
→ |
y |
(14) |
Property / Task
Prove or disprove termination.Answer / Result
No.Proof (by AProVE @ termCOMP 2023)
1 Innermost Lhss Increase
We add the following left hand sides to the innermost strategy.
while(true,s(s(s(x0)))) |
f(x0) |
gt(s(x0),s(x1)) |
gt(s(x0),0) |
gt(0,0) |
gt(0,s(x0)) |
if(true,x0) |
if(false,x0) |
neq(s(x0),s(x1)) |
neq(0,0) |
neq(0,s(x0)) |
neq(s(x0),0) |
plus(s(x0),x1) |
plus(0,x0) |
1.1 Dependency Pair Transformation
The following set of initial dependency pairs has been identified.
while#(true,s(s(s(i)))) |
→ |
while#(gt(s(s(s(i))),s(0)),f(s(s(s(i))))) |
(15) |
while#(true,s(s(s(i)))) |
→ |
gt#(s(s(s(i))),s(0)) |
(16) |
while#(true,s(s(s(i)))) |
→ |
f#(s(s(s(i)))) |
(17) |
f#(i) |
→ |
if#(neq(i,s(s(0))),i) |
(18) |
f#(i) |
→ |
neq#(i,s(s(0))) |
(19) |
gt#(s(x),s(y)) |
→ |
gt#(x,y) |
(20) |
if#(true,i) |
→ |
plus#(i,s(0)) |
(21) |
neq#(s(x),s(y)) |
→ |
neq#(x,y) |
(22) |
plus#(s(x),y) |
→ |
plus#(x,s(y)) |
(23) |
It remains to prove infiniteness of the resulting DP problem.
1.1.1 Pair and Rule Removal
Some pairs and rules have been removed and it remains to prove infiniteness of the remaing problem.
The following pairs have been deleted.
while#(true,s(s(s(i)))) |
→ |
gt#(s(s(s(i))),s(0)) |
(16) |
while#(true,s(s(s(i)))) |
→ |
f#(s(s(s(i)))) |
(17) |
f#(i) |
→ |
if#(neq(i,s(s(0))),i) |
(18) |
f#(i) |
→ |
neq#(i,s(s(0))) |
(19) |
gt#(s(x),s(y)) |
→ |
gt#(x,y) |
(20) |
if#(true,i) |
→ |
plus#(i,s(0)) |
(21) |
neq#(s(x),s(y)) |
→ |
neq#(x,y) |
(22) |
plus#(s(x),y) |
→ |
plus#(x,s(y)) |
(23) |
and the following rules have been deleted.
1.1.1.1 Full Strategy Switch Processor
We have a locally confluent overlay TRS, no overlaps between P and R,
and the strategy is less than innermost. Hence, it suffices to prove non-termination for the
full rewrite relation.
Local Confluence Proof
All critical pairs are joinable within
10 step(s).
101.1.1.1.1 Non-Loop
An infinite (possibly non-looping) derivation has been detected due to the following pattern rule.
while#(true,s(s(s(s(zr0)))))
{zr0/0}
n
{zr0/s(zr0)}
→+while#(true,s(s(s(s(s(zr0))))))
{zr0/0}
n
{zr0/s(zr0)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl0)))))
{zl0/0}
n
{zl0/s(zl0)}
→+while#(true,s(s(s(s(s(zr0))))))
{zr0/0}
n
{zr0/s(zr0)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl0)))))
{zl0/0}
n
{zl0/s(zl0)}
→+while#(true,s(s(s(s(s(zr1))))))
{zr1/0}
n
{zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl1)))))
{zl1/0}
n
{zl1/s(zl1)}
→+while#(true,s(s(s(s(s(zr1))))))
{zr1/0}
n
{zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl1)))))
{zl1/0}
n
{zl1/s(zl1)}
→+while#(true,s(s(s(s(s(zr1))))))
{zr1/0, zl1/0}
n
{zr1/s(zr1), zl1/s(zl1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl1)))))
{zr1/0, zl1/0}
n
{zr1/s(zr1), zl1/s(zl1)}
→+while#(true,s(s(s(s(s(zr1))))))
{zr1/0, zl1/0}
n
{zr1/s(zr1), zl1/s(zl1)}
The pattern rule is obtained by narrowing the following two pattern rules.
-
while#(true,s(s(s(s(zl1)))))
{zr1/0, zl1/0}
n
{zr1/s(zr1), zl1/s(zl1)}
→+while#(true,plus(0,s(s(s(s(s(zr1)))))))
{zl1/0, zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl1)))))
{zr1/0, zl1/0}
n
{zr1/s(zr1), zl1/s(zl1)}
→+while#(true,plus(0,s(s(s(s(s(zr1)))))))
{zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl1)))))
{zl1/0}
n
{zr1/s(zr1), zl1/s(zl1)}
→+while#(true,plus(0,s(s(s(s(s(zr1)))))))
{zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl1)))))
{zl1/0}
n
{zr1/s(zr1), zl1/s(zl1)}
→+while#(true,plus(0,s(s(s(s(s(zr1)))))))
{zr1/0}
n
{zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl1)))))
{zl1/0}
n
{zl1/s(zl1)}
→+while#(true,plus(0,s(s(s(s(s(zr1)))))))
{zr1/0}
n
{zr1/s(zr1)}
The pattern rule is obtained by instantiating the following pattern rule.
-
while#(true,s(s(s(s(zl1)))))
{zl1/x0}
n
{zl1/s(zl1)}
→+while#(true,plus(x0,s(s(s(s(s(zr1)))))))
{zr1/0}
n
{zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl1)))))
{zl1/x0}
n
{zl1/s(zl1)}
→+while#(true,plus(x0,s(s(s(s(s(zr0)))))))
{zr0/0}
n
{zr0/s(zr0)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl0)))))
{zl0/x0}
n
{zl0/s(zl0)}
→+while#(true,plus(x0,s(s(s(s(s(zr0)))))))
{zr0/0}
n
{zr0/s(zr0)}
The pattern rule is obtained by instantiating the following pattern rule.
-
while#(true,s(s(s(s(zl0)))))
{zl0/y1}
n
{zl0/s(zl0)}
→+while#(true,plus(y1,s(s(s(s(s(zr0)))))))
{zr0/0}
n
{zr0/s(zr0)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zl0)))))
{zl0/y1}
n
{zl0/s(zl0)}
→+while#(true,plus(y1,s(s(s(s(s(zt1)))))))
{zt1/0}
n
{zt1/s(zt1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zs1)))))
{zs1/y1}
n
{zs1/s(zs1)}
→+while#(true,plus(y1,s(s(s(s(s(zt1)))))))
{zt1/0}
n
{zt1/s(zt1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zs1)))))
{zs1/y1}
n
{zs1/s(zs1)}
→+while#(true,plus(y1,s(s(s(s(s(zt1)))))))
{zt1/0, zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zs1)))))
{zt1/0, zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
→+while#(true,plus(y1,s(s(s(s(s(zt1)))))))
{zt1/0, zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
The pattern rule is obtained by narrowing the following two pattern rules.
-
while#(true,s(s(s(s(zs1)))))
{zt1/0, zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
→+while#(true,plus(s(zs1),s(s(s(s(0))))))
{zt1/0, zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zs1)))))
{zt1/0, zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
→+while#(true,plus(s(zs1),s(s(s(s(0))))))
{zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zs1)))))
{zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
→+while#(true,plus(s(zs1),s(s(s(s(0))))))
{zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
The pattern rule is obtained by instantiating the following pattern rule.
-
while#(true,s(s(s(s(zs1)))))∅n
{zt1/s(zt1), zs1/s(zs1)}
→+while#(true,plus(s(zs1),s(s(s(s(0))))))∅n
{zt1/s(zt1), zs1/s(zs1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zs1)))))∅n
{zt1/s(zt1), zs1/s(zs1)}
→+while#(true,plus(s(zs1),s(s(s(s(0))))))∅n
{zs1/s(zs1)}
The pattern rule is equivalent to the following pattern rule
-
while#(true,s(s(s(s(zs1)))))∅n
{zs1/s(zs1)}
→+while#(true,plus(s(zs1),s(s(s(s(0))))))∅n
{zs1/s(zs1)}
The pattern rule is obtained by instantiating the following pattern rule.
-
while#(true,s(s(s(s(zs1)))))∅n∅→+while#(true,plus(s(zs1),s(s(s(s(0))))))∅n∅
The pattern rule is obtained by instantiating the following pattern rule.
-
while#(true,s(s(s(x0))))∅n∅→+while#(true,plus(x0,s(s(s(s(0))))))∅n∅
The pattern rule is obtained by instantiating the following pattern rule.
-
while#(true,s(s(s(i))))∅n∅→+while#(true,plus(i,s(s(s(s(0))))))∅n∅
The pattern rule is obtained by rewriting the following pattern rule.
-
while#(true,s(s(s(i))))∅n∅→+while#(gt(s(s(s(i))),s(0)),f(s(s(s(i)))))∅n∅
The pattern rule is obtained from the original rule
-
plus(s(zs1),s(s(s(s(0)))))
{zt1/0, zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
→+plus(y1,s(s(s(s(s(zt1))))))
{zs1/y1, zt1/0}
n
{zs1/s(zs1), zt1/s(zt1)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(zs1),s(s(s(s(0)))))
{zt1/0, zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
→+plus(y1,s(s(s(s(s(zt1))))))
{zt1/0}
n
{zs1/s(zs1), zt1/s(zt1)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(zs1),s(s(s(s(0)))))
{zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
→+plus(y1,s(s(s(s(s(zt1))))))
{zt1/0}
n
{zs1/s(zs1), zt1/s(zt1)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(zs1),s(s(s(s(0)))))
{zs1/y1}
n
{zt1/s(zt1), zs1/s(zs1)}
→+plus(y1,s(s(s(s(s(zt1))))))
{zt1/0}
n
{zt1/s(zt1)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(zs1),s(s(s(s(0)))))
{zs1/y1}
n
{zs1/s(zs1)}
→+plus(y1,s(s(s(s(s(zt1))))))
{zt1/0}
n
{zt1/s(zt1)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(zs1),s(s(s(s(0)))))
{zs1/y1}
n
{zs1/s(zs1)}
→+plus(y1,s(zt1))
{zt1/s(s(s(s(0))))}
n
{zt1/s(zt1)}
The pattern rule is obtained by instantiating the following pattern rule.
-
plus(s(zs1),y0)
{zs1/y1}
n
{zs1/s(zs1)}
→+plus(y1,s(zt1))
{zt1/y0}
n
{zt1/s(zt1)}
The pattern rule is obtained by instantiating the following pattern rule.
-
plus(s(zs1),y1)
{zs1/y0}
n
{zs1/s(zs1)}
→+plus(y0,s(zt1))
{zt1/y1}
n
{zt1/s(zt1)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(zs1),y1)
{zs1/y0}
n
{zs1/s(zs1)}
→+plus(y0,s(zt0))
{zt0/y1}
n
{zt0/s(zt0)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(zs0),y1)
{zs0/y0}
n
{zs0/s(zs0)}
→+plus(y0,s(zt0))
{zt0/y1}
n
{zt0/s(zt0)}
The pattern rule is obtained by instantiating the following pattern rule.
-
plus(s(zs0),y)
{zs0/x}
n
{zs0/s(zs0)}
→+plus(x,s(zt0))
{zt0/y}
n
{zt0/s(zt0)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(zs0),y)
{zs0/x}
n
{zs0/s(zs0)}
→+plus(x,s(y))∅n
{y/s(y)}
The pattern rule is equivalent to the following pattern rule
-
plus(s(x),y)∅n
{x/s(x)}
→+plus(x,s(y))∅n
{y/s(y)}
The pattern rule is obtained by adding an initial pumping substitution from
-
plus(s(x),y)∅n∅→+plus(x,s(y))∅n∅
The pattern rule is obtained from the original rule
-
plus(0,s(s(s(s(s(zr1))))))
{zl1/0, zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
→+s(s(s(s(s(zr1)))))
{zl1/0, zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
plus(0,s(s(s(s(s(zr1))))))
{zl1/0, zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
→+s(s(s(s(s(zr1)))))
{zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
plus(0,s(s(s(s(s(zr1))))))
{zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
→+s(s(s(s(s(zr1)))))
{zr1/0}
n
{zl1/s(zl1), zr1/s(zr1)}
The pattern rule is obtained by instantiating the following pattern rule.
-
plus(0,s(s(s(s(s(zr1))))))∅n
{zl1/s(zl1), zr1/s(zr1)}
→+s(s(s(s(s(zr1)))))∅n
{zl1/s(zl1), zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
plus(0,s(s(s(s(s(zr1))))))∅n
{zl1/s(zl1), zr1/s(zr1)}
→+s(s(s(s(s(zr1)))))∅n
{zr1/s(zr1)}
The pattern rule is equivalent to the following pattern rule
-
plus(0,s(s(s(s(s(zr1))))))∅n
{zr1/s(zr1)}
→+s(s(s(s(s(zr1)))))∅n
{zr1/s(zr1)}
The pattern rule is obtained by instantiating the following pattern rule.
-
plus(0,s(s(s(s(s(zr1))))))∅n∅→+s(s(s(s(s(zr1)))))∅n∅
The pattern rule is obtained by instantiating the following pattern rule.
-
plus(0,y0)∅n∅→+y0∅n∅
The pattern rule is obtained by instantiating the following pattern rule.
-
plus(0,y)∅n∅→+y∅n∅
The pattern rule is obtained from the original rule