The rewrite relation of the following TRS is considered.
plus(0,y) |
→ |
y |
(1) |
plus(s(x),y) |
→ |
s(plus(x,y)) |
(2) |
times(0,y) |
→ |
0 |
(3) |
times(s(x),y) |
→ |
plus(y,times(x,y)) |
(4) |
eq_nat(0,s(y)) |
→ |
false |
(5) |
eq_nat(0,0) |
→ |
true |
(6) |
eq_nat(s(x),s(y)) |
→ |
eq_nat(x,y) |
(7) |
eq_nat(s(x),0) |
→ |
false |
(8) |
eq_rat(pair(a,b),pair(c,d)) |
→ |
eq_nat(times(a,d),times(b,c)) |
(9) |
div_rat(pair(a,b),pair(c,d)) |
→ |
pair(times(a,d),times(b,c)) |
(10) |
times_rat(pair(a,b),pair(c,d)) |
→ |
pair(times(a,c),times(b,d)) |
(11) |
plus_rat(pair(a,b),pair(c,d)) |
→ |
pair(plus(times(a,d),times(c,b)),times(b,d)) |
(12) |
non_zero_rat(pair(a,b)) |
→ |
non_zero_nat(times(a,b)) |
(13) |
non_zero_nat(s(0)) |
→ |
true |
(14) |
non_zero_nat(0) |
→ |
false |
(15) |
non_zero_nat(s(s(x))) |
→ |
non_zero_nat(s(x)) |
(16) |
2 |
→ |
pair(s(s(0)),s(0)) |
(17) |
minus_nat(s(x),s(y)) |
→ |
minus_nat(x,y) |
(18) |
sqrt2(r) |
→ |
if_approx(non_zero_rat(r),eq_rat(2,times_rat(r,r)),r) |
(19) |
if_approx(true,true,r) |
→ |
r |
(20) |
if_approx(true,false,r) |
→ |
sqrt2(div_rat(plus_rat(r,div_rat(2,r)),2)) |
(21) |
init |
→ |
sqrt2(2) |
(22) |
run_again(x) |
→ |
run_again(init) |
(23) |
The evaluation strategy is innermost.
plus#(s(x),y) |
→ |
plus#(x,y) |
(24) |
times#(s(x),y) |
→ |
plus#(y,times(x,y)) |
(25) |
times#(s(x),y) |
→ |
times#(x,y) |
(26) |
eq_nat#(s(x),s(y)) |
→ |
eq_nat#(x,y) |
(27) |
eq_rat#(pair(a,b),pair(c,d)) |
→ |
eq_nat#(times(a,d),times(b,c)) |
(28) |
eq_rat#(pair(a,b),pair(c,d)) |
→ |
times#(a,d) |
(29) |
eq_rat#(pair(a,b),pair(c,d)) |
→ |
times#(b,c) |
(30) |
div_rat#(pair(a,b),pair(c,d)) |
→ |
times#(a,d) |
(31) |
div_rat#(pair(a,b),pair(c,d)) |
→ |
times#(b,c) |
(32) |
times_rat#(pair(a,b),pair(c,d)) |
→ |
times#(a,c) |
(33) |
times_rat#(pair(a,b),pair(c,d)) |
→ |
times#(b,d) |
(34) |
plus_rat#(pair(a,b),pair(c,d)) |
→ |
plus#(times(a,d),times(c,b)) |
(35) |
plus_rat#(pair(a,b),pair(c,d)) |
→ |
times#(a,d) |
(36) |
plus_rat#(pair(a,b),pair(c,d)) |
→ |
times#(c,b) |
(37) |
plus_rat#(pair(a,b),pair(c,d)) |
→ |
times#(b,d) |
(38) |
non_zero_rat#(pair(a,b)) |
→ |
non_zero_nat#(times(a,b)) |
(39) |
non_zero_rat#(pair(a,b)) |
→ |
times#(a,b) |
(40) |
non_zero_nat#(s(s(x))) |
→ |
non_zero_nat#(s(x)) |
(41) |
minus_nat#(s(x),s(y)) |
→ |
minus_nat#(x,y) |
(42) |
sqrt2#(r) |
→ |
if_approx#(non_zero_rat(r),eq_rat(2,times_rat(r,r)),r) |
(43) |
sqrt2#(r) |
→ |
non_zero_rat#(r) |
(44) |
sqrt2#(r) |
→ |
eq_rat#(2,times_rat(r,r)) |
(45) |
sqrt2#(r) |
→ |
2# |
(46) |
sqrt2#(r) |
→ |
times_rat#(r,r) |
(47) |
if_approx#(true,false,r) |
→ |
sqrt2#(div_rat(plus_rat(r,div_rat(2,r)),2)) |
(48) |
if_approx#(true,false,r) |
→ |
div_rat#(plus_rat(r,div_rat(2,r)),2) |
(49) |
if_approx#(true,false,r) |
→ |
plus_rat#(r,div_rat(2,r)) |
(50) |
if_approx#(true,false,r) |
→ |
div_rat#(2,r) |
(51) |
if_approx#(true,false,r) |
→ |
2# |
(52) |
init# |
→ |
sqrt2#(2) |
(53) |
init# |
→ |
2# |
(54) |
run_again#(x) |
→ |
run_again#(init) |
(55) |
run_again#(x) |
→ |
init# |
(56) |
It remains to prove infiniteness of the resulting DP problem.
plus#(s(x),y) |
→ |
plus#(x,y) |
(24) |
times#(s(x),y) |
→ |
plus#(y,times(x,y)) |
(25) |
times#(s(x),y) |
→ |
times#(x,y) |
(26) |
eq_nat#(s(x),s(y)) |
→ |
eq_nat#(x,y) |
(27) |
eq_rat#(pair(a,b),pair(c,d)) |
→ |
eq_nat#(times(a,d),times(b,c)) |
(28) |
eq_rat#(pair(a,b),pair(c,d)) |
→ |
times#(a,d) |
(29) |
eq_rat#(pair(a,b),pair(c,d)) |
→ |
times#(b,c) |
(30) |
div_rat#(pair(a,b),pair(c,d)) |
→ |
times#(a,d) |
(31) |
div_rat#(pair(a,b),pair(c,d)) |
→ |
times#(b,c) |
(32) |
times_rat#(pair(a,b),pair(c,d)) |
→ |
times#(a,c) |
(33) |
times_rat#(pair(a,b),pair(c,d)) |
→ |
times#(b,d) |
(34) |
plus_rat#(pair(a,b),pair(c,d)) |
→ |
plus#(times(a,d),times(c,b)) |
(35) |
plus_rat#(pair(a,b),pair(c,d)) |
→ |
times#(a,d) |
(36) |
plus_rat#(pair(a,b),pair(c,d)) |
→ |
times#(c,b) |
(37) |
plus_rat#(pair(a,b),pair(c,d)) |
→ |
times#(b,d) |
(38) |
non_zero_rat#(pair(a,b)) |
→ |
non_zero_nat#(times(a,b)) |
(39) |
non_zero_rat#(pair(a,b)) |
→ |
times#(a,b) |
(40) |
non_zero_nat#(s(s(x))) |
→ |
non_zero_nat#(s(x)) |
(41) |
minus_nat#(s(x),s(y)) |
→ |
minus_nat#(x,y) |
(42) |
sqrt2#(r) |
→ |
if_approx#(non_zero_rat(r),eq_rat(2,times_rat(r,r)),r) |
(43) |
sqrt2#(r) |
→ |
non_zero_rat#(r) |
(44) |
sqrt2#(r) |
→ |
eq_rat#(2,times_rat(r,r)) |
(45) |
sqrt2#(r) |
→ |
2# |
(46) |
sqrt2#(r) |
→ |
times_rat#(r,r) |
(47) |
if_approx#(true,false,r) |
→ |
sqrt2#(div_rat(plus_rat(r,div_rat(2,r)),2)) |
(48) |
if_approx#(true,false,r) |
→ |
div_rat#(plus_rat(r,div_rat(2,r)),2) |
(49) |
if_approx#(true,false,r) |
→ |
plus_rat#(r,div_rat(2,r)) |
(50) |
if_approx#(true,false,r) |
→ |
div_rat#(2,r) |
(51) |
if_approx#(true,false,r) |
→ |
2# |
(52) |
init# |
→ |
sqrt2#(2) |
(53) |
init# |
→ |
2# |
(54) |
run_again#(x) |
→ |
init# |
(56) |
and the following rules have been deleted.
We restrict the innermost strategy to the following left hand sides.
plus(0,x0) |
plus(s(x0),x1) |
times(0,x0) |
times(s(x0),x1) |
eq_nat(0,s(x0)) |
eq_nat(0,0) |
eq_nat(s(x0),s(x1)) |
eq_nat(s(x0),0) |
eq_rat(pair(x0,x1),pair(x2,x3)) |
div_rat(pair(x0,x1),pair(x2,x3)) |
times_rat(pair(x0,x1),pair(x2,x3)) |
plus_rat(pair(x0,x1),pair(x2,x3)) |
non_zero_rat(pair(x0,x1)) |
non_zero_nat(s(0)) |
non_zero_nat(0) |
non_zero_nat(s(s(x0))) |
2 |
sqrt2(x0) |
if_approx(true,true,x0) |
if_approx(true,false,x0) |
init |
We restrict the innermost strategy to the following left hand sides.
plus(0,x0) |
plus(s(x0),x1) |
times(0,x0) |
times(s(x0),x1) |
eq_nat(0,s(x0)) |
eq_nat(0,0) |
eq_nat(s(x0),s(x1)) |
eq_nat(s(x0),0) |
eq_rat(pair(x0,x1),pair(x2,x3)) |
div_rat(pair(x0,x1),pair(x2,x3)) |
times_rat(pair(x0,x1),pair(x2,x3)) |
plus_rat(pair(x0,x1),pair(x2,x3)) |
non_zero_rat(pair(x0,x1)) |
non_zero_nat(s(0)) |
non_zero_nat(0) |
non_zero_nat(s(s(x0))) |
2 |
sqrt2(x0) |
if_approx(true,true,x0) |
if_approx(true,false,x0) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),2)),eq_rat(2,times_rat(div_rat(plus_rat(2,div_rat(2,2)),2),div_rat(plus_rat(2,div_rat(2,2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(107) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(2,times_rat(div_rat(plus_rat(2,div_rat(2,2)),2),div_rat(plus_rat(2,div_rat(2,2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(108) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(2,div_rat(2,2)),2),div_rat(plus_rat(2,div_rat(2,2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(109) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(2,2)),2),div_rat(plus_rat(2,div_rat(2,2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(110) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),2)),2),div_rat(plus_rat(2,div_rat(2,2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(111) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),2),div_rat(plus_rat(2,div_rat(2,2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(112) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(2,div_rat(2,2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(113) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(2,2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(114) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),2)),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(115) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),2))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(116) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))))),div_rat(plus_rat(2,div_rat(2,2)),2))) |
(117) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(2,2)),2))) |
(118) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),2)),2))) |
(119) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),2))) |
(120) |
run_again#(y0) |
→ |
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))))) |
(121) |
t0
|
= |
run_again#(y0) |
|
→P
|
run_again#(if_approx(non_zero_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0)))),eq_rat(pair(s(s(0)),s(0)),times_rat(div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))))),div_rat(plus_rat(pair(s(s(0)),s(0)),div_rat(pair(s(s(0)),s(0)),pair(s(s(0)),s(0)))),pair(s(s(0)),s(0))))) |
|
= |
t1
|
where t