1.08/1.10 MAYBE 1.08/1.10 1.08/1.10 DP problem for innermost termination. 1.08/1.10 P = 1.08/1.10 isdiv#(x, y) -> isdiv#(0 - x, y) [0 > x] 1.08/1.10 isdiv#(I0, I1) -> isdiv#(I0, 0 - I1) [0 > I1] 1.08/1.10 isdiv#(I2, I3) -> isdiv#(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 if_2#(false, I7, I8, zs) -> filter#(I7, zs) 1.08/1.10 filter#(I9, cons(I10, B0)) -> if_2#(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 filter#(I9, cons(I10, B0)) -> isdiv#(I9, I10) 1.08/1.10 if_1#(true, I11, I12, B1) -> filter#(I11, B1) 1.08/1.10 filter#(I13, cons(I14, B2)) -> if_1#(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 filter#(I13, cons(I14, B2)) -> isdiv#(I13, I14) 1.08/1.10 sieve#(cons(I16, ys)) -> sieve#(filter(I16, ys)) 1.08/1.10 sieve#(cons(I16, ys)) -> filter#(I16, ys) 1.08/1.10 nats#(I17, I18) -> nats#(I17 + 1, I18) [I18 > I17] 1.08/1.10 primes#(I23) -> sieve#(nats(2, I23)) 1.08/1.10 primes#(I23) -> nats#(2, I23) 1.08/1.10 mem#(I24, cons(I25, B3)) -> mem#(I24, B3) [I24 > I25] 1.08/1.10 mem#(I26, cons(I27, B4)) -> mem#(I26, B4) [I27 > I26] 1.08/1.10 isprime#(I31) -> mem#(I31, primes(I31)) 1.08/1.10 isprime#(I31) -> primes#(I31) 1.08/1.10 R = 1.08/1.10 isdiv(x, y) -> isdiv(0 - x, y) [0 > x] 1.08/1.10 isdiv(I0, I1) -> isdiv(I0, 0 - I1) [0 > I1] 1.08/1.10 isdiv(I2, I3) -> isdiv(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 isdiv(I4, I5) -> false [I4 > I5 && I5 > 0] 1.08/1.10 isdiv(I6, 0) -> true [I6 > 0] 1.08/1.10 if_2(false, I7, I8, zs) -> cons(I7, filter(I7, zs)) 1.08/1.10 filter(I9, cons(I10, B0)) -> if_2(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 if_1(true, I11, I12, B1) -> filter(I11, B1) 1.08/1.10 filter(I13, cons(I14, B2)) -> if_1(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 filter(I15, nil) -> nil 1.08/1.10 sieve(cons(I16, ys)) -> cons(I16, sieve(filter(I16, ys))) 1.08/1.10 sieve(nil) -> nil 1.08/1.10 nats(I17, I18) -> cons(I17, nats(I17 + 1, I18)) [I18 > I17] 1.08/1.10 nats(I19, I20) -> cons(I19, nil) [I19 = I20] 1.08/1.10 nats(I21, I22) -> nil [I21 > I22] 1.08/1.10 primes(I23) -> sieve(nats(2, I23)) 1.08/1.10 mem(I24, cons(I25, B3)) -> mem(I24, B3) [I24 > I25] 1.08/1.10 mem(I26, cons(I27, B4)) -> mem(I26, B4) [I27 > I26] 1.08/1.10 mem(I28, cons(I29, B5)) -> true [I28 = I29] 1.08/1.10 mem(I30, nil) -> false 1.08/1.10 isprime(I31) -> mem(I31, primes(I31)) 1.08/1.10 1.08/1.10 The dependency graph for this problem is: 1.08/1.10 0 -> 1, 2 1.08/1.10 1 -> 0, 2 1.08/1.10 2 -> 2 1.08/1.10 3 -> 4, 5, 7, 8 1.08/1.10 4 -> 3 1.08/1.10 5 -> 0, 1, 2 1.08/1.10 6 -> 4, 5, 7, 8 1.08/1.10 7 -> 6 1.08/1.10 8 -> 0, 1, 2 1.08/1.10 9 -> 9, 10 1.08/1.10 10 -> 4, 5, 7, 8 1.08/1.10 11 -> 11 1.08/1.10 12 -> 9, 10 1.08/1.10 13 -> 11 1.08/1.10 14 -> 14, 15 1.08/1.10 15 -> 14, 15 1.08/1.10 16 -> 14, 15 1.08/1.10 17 -> 12, 13 1.08/1.10 Where: 1.08/1.10 0) isdiv#(x, y) -> isdiv#(0 - x, y) [0 > x] 1.08/1.10 1) isdiv#(I0, I1) -> isdiv#(I0, 0 - I1) [0 > I1] 1.08/1.10 2) isdiv#(I2, I3) -> isdiv#(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 3) if_2#(false, I7, I8, zs) -> filter#(I7, zs) 1.08/1.10 4) filter#(I9, cons(I10, B0)) -> if_2#(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 5) filter#(I9, cons(I10, B0)) -> isdiv#(I9, I10) 1.08/1.10 6) if_1#(true, I11, I12, B1) -> filter#(I11, B1) 1.08/1.10 7) filter#(I13, cons(I14, B2)) -> if_1#(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 8) filter#(I13, cons(I14, B2)) -> isdiv#(I13, I14) 1.08/1.10 9) sieve#(cons(I16, ys)) -> sieve#(filter(I16, ys)) 1.08/1.10 10) sieve#(cons(I16, ys)) -> filter#(I16, ys) 1.08/1.10 11) nats#(I17, I18) -> nats#(I17 + 1, I18) [I18 > I17] 1.08/1.10 12) primes#(I23) -> sieve#(nats(2, I23)) 1.08/1.10 13) primes#(I23) -> nats#(2, I23) 1.08/1.10 14) mem#(I24, cons(I25, B3)) -> mem#(I24, B3) [I24 > I25] 1.08/1.10 15) mem#(I26, cons(I27, B4)) -> mem#(I26, B4) [I27 > I26] 1.08/1.10 16) isprime#(I31) -> mem#(I31, primes(I31)) 1.08/1.10 17) isprime#(I31) -> primes#(I31) 1.08/1.10 1.08/1.10 We have the following SCCs. 1.08/1.10 { 14, 15 } 1.08/1.10 { 11 } 1.08/1.10 { 9 } 1.08/1.10 { 3, 4, 6, 7 } 1.08/1.10 { 0, 1 } 1.08/1.10 { 2 } 1.08/1.10 1.08/1.10 DP problem for innermost termination. 1.08/1.10 P = 1.08/1.10 isdiv#(I2, I3) -> isdiv#(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 R = 1.08/1.10 isdiv(x, y) -> isdiv(0 - x, y) [0 > x] 1.08/1.10 isdiv(I0, I1) -> isdiv(I0, 0 - I1) [0 > I1] 1.08/1.10 isdiv(I2, I3) -> isdiv(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 isdiv(I4, I5) -> false [I4 > I5 && I5 > 0] 1.08/1.10 isdiv(I6, 0) -> true [I6 > 0] 1.08/1.10 if_2(false, I7, I8, zs) -> cons(I7, filter(I7, zs)) 1.08/1.10 filter(I9, cons(I10, B0)) -> if_2(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 if_1(true, I11, I12, B1) -> filter(I11, B1) 1.08/1.10 filter(I13, cons(I14, B2)) -> if_1(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 filter(I15, nil) -> nil 1.08/1.10 sieve(cons(I16, ys)) -> cons(I16, sieve(filter(I16, ys))) 1.08/1.10 sieve(nil) -> nil 1.08/1.10 nats(I17, I18) -> cons(I17, nats(I17 + 1, I18)) [I18 > I17] 1.08/1.10 nats(I19, I20) -> cons(I19, nil) [I19 = I20] 1.08/1.10 nats(I21, I22) -> nil [I21 > I22] 1.08/1.10 primes(I23) -> sieve(nats(2, I23)) 1.08/1.10 mem(I24, cons(I25, B3)) -> mem(I24, B3) [I24 > I25] 1.08/1.10 mem(I26, cons(I27, B4)) -> mem(I26, B4) [I27 > I26] 1.08/1.10 mem(I28, cons(I29, B5)) -> true [I28 = I29] 1.08/1.10 mem(I30, nil) -> false 1.08/1.10 isprime(I31) -> mem(I31, primes(I31)) 1.08/1.10 1.08/1.10 We use the reverse value criterion with the projection function NU: 1.08/1.10 NU[isdiv#(z1,z2)] = z2 + -1 * z1 1.08/1.10 1.08/1.10 This gives the following inequalities: 1.08/1.10 I3 >= I2 && I2 > 0 ==> I3 + -1 * I2 > 0 - I2 + I3 + -1 * I2 with I3 + -1 * I2 >= 0 1.08/1.10 1.08/1.10 All dependency pairs are strictly oriented, so the entire dependency pair problem may be removed. 1.08/1.10 1.08/1.10 DP problem for innermost termination. 1.08/1.10 P = 1.08/1.10 isdiv#(x, y) -> isdiv#(0 - x, y) [0 > x] 1.08/1.10 isdiv#(I0, I1) -> isdiv#(I0, 0 - I1) [0 > I1] 1.08/1.10 R = 1.08/1.10 isdiv(x, y) -> isdiv(0 - x, y) [0 > x] 1.08/1.10 isdiv(I0, I1) -> isdiv(I0, 0 - I1) [0 > I1] 1.08/1.10 isdiv(I2, I3) -> isdiv(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 isdiv(I4, I5) -> false [I4 > I5 && I5 > 0] 1.08/1.10 isdiv(I6, 0) -> true [I6 > 0] 1.08/1.10 if_2(false, I7, I8, zs) -> cons(I7, filter(I7, zs)) 1.08/1.10 filter(I9, cons(I10, B0)) -> if_2(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 if_1(true, I11, I12, B1) -> filter(I11, B1) 1.08/1.10 filter(I13, cons(I14, B2)) -> if_1(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 filter(I15, nil) -> nil 1.08/1.10 sieve(cons(I16, ys)) -> cons(I16, sieve(filter(I16, ys))) 1.08/1.10 sieve(nil) -> nil 1.08/1.10 nats(I17, I18) -> cons(I17, nats(I17 + 1, I18)) [I18 > I17] 1.08/1.10 nats(I19, I20) -> cons(I19, nil) [I19 = I20] 1.08/1.10 nats(I21, I22) -> nil [I21 > I22] 1.08/1.10 primes(I23) -> sieve(nats(2, I23)) 1.08/1.10 mem(I24, cons(I25, B3)) -> mem(I24, B3) [I24 > I25] 1.08/1.10 mem(I26, cons(I27, B4)) -> mem(I26, B4) [I27 > I26] 1.08/1.10 mem(I28, cons(I29, B5)) -> true [I28 = I29] 1.08/1.10 mem(I30, nil) -> false 1.08/1.10 isprime(I31) -> mem(I31, primes(I31)) 1.08/1.10 1.08/1.10 We use the reverse value criterion with the projection function NU: 1.08/1.10 NU[isdiv#(z1,z2)] = 0 + -1 * z1 1.08/1.10 1.08/1.10 This gives the following inequalities: 1.08/1.10 0 > x ==> 0 + -1 * x > 0 + -1 * (0 - x) with 0 + -1 * x >= 0 1.08/1.10 0 > I1 ==> 0 + -1 * I0 >= 0 + -1 * I0 1.08/1.10 1.08/1.10 We remove all the strictly oriented dependency pairs. 1.08/1.10 1.08/1.10 DP problem for innermost termination. 1.08/1.10 P = 1.08/1.10 isdiv#(I0, I1) -> isdiv#(I0, 0 - I1) [0 > I1] 1.08/1.10 R = 1.08/1.10 isdiv(x, y) -> isdiv(0 - x, y) [0 > x] 1.08/1.10 isdiv(I0, I1) -> isdiv(I0, 0 - I1) [0 > I1] 1.08/1.10 isdiv(I2, I3) -> isdiv(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 isdiv(I4, I5) -> false [I4 > I5 && I5 > 0] 1.08/1.10 isdiv(I6, 0) -> true [I6 > 0] 1.08/1.10 if_2(false, I7, I8, zs) -> cons(I7, filter(I7, zs)) 1.08/1.10 filter(I9, cons(I10, B0)) -> if_2(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 if_1(true, I11, I12, B1) -> filter(I11, B1) 1.08/1.10 filter(I13, cons(I14, B2)) -> if_1(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 filter(I15, nil) -> nil 1.08/1.10 sieve(cons(I16, ys)) -> cons(I16, sieve(filter(I16, ys))) 1.08/1.10 sieve(nil) -> nil 1.08/1.10 nats(I17, I18) -> cons(I17, nats(I17 + 1, I18)) [I18 > I17] 1.08/1.10 nats(I19, I20) -> cons(I19, nil) [I19 = I20] 1.08/1.10 nats(I21, I22) -> nil [I21 > I22] 1.08/1.10 primes(I23) -> sieve(nats(2, I23)) 1.08/1.10 mem(I24, cons(I25, B3)) -> mem(I24, B3) [I24 > I25] 1.08/1.10 mem(I26, cons(I27, B4)) -> mem(I26, B4) [I27 > I26] 1.08/1.10 mem(I28, cons(I29, B5)) -> true [I28 = I29] 1.08/1.10 mem(I30, nil) -> false 1.08/1.10 isprime(I31) -> mem(I31, primes(I31)) 1.08/1.10 1.08/1.10 The dependency graph for this problem is: 1.08/1.10 1 -> 1.08/1.10 Where: 1.08/1.10 1) isdiv#(I0, I1) -> isdiv#(I0, 0 - I1) [0 > I1] 1.08/1.10 1.08/1.10 We have the following SCCs. 1.08/1.10 1.08/1.10 1.08/1.10 DP problem for innermost termination. 1.08/1.10 P = 1.08/1.10 if_2#(false, I7, I8, zs) -> filter#(I7, zs) 1.08/1.10 filter#(I9, cons(I10, B0)) -> if_2#(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 if_1#(true, I11, I12, B1) -> filter#(I11, B1) 1.08/1.10 filter#(I13, cons(I14, B2)) -> if_1#(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 R = 1.08/1.10 isdiv(x, y) -> isdiv(0 - x, y) [0 > x] 1.08/1.10 isdiv(I0, I1) -> isdiv(I0, 0 - I1) [0 > I1] 1.08/1.10 isdiv(I2, I3) -> isdiv(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 isdiv(I4, I5) -> false [I4 > I5 && I5 > 0] 1.08/1.10 isdiv(I6, 0) -> true [I6 > 0] 1.08/1.10 if_2(false, I7, I8, zs) -> cons(I7, filter(I7, zs)) 1.08/1.10 filter(I9, cons(I10, B0)) -> if_2(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 if_1(true, I11, I12, B1) -> filter(I11, B1) 1.08/1.10 filter(I13, cons(I14, B2)) -> if_1(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 filter(I15, nil) -> nil 1.08/1.10 sieve(cons(I16, ys)) -> cons(I16, sieve(filter(I16, ys))) 1.08/1.10 sieve(nil) -> nil 1.08/1.10 nats(I17, I18) -> cons(I17, nats(I17 + 1, I18)) [I18 > I17] 1.08/1.10 nats(I19, I20) -> cons(I19, nil) [I19 = I20] 1.08/1.10 nats(I21, I22) -> nil [I21 > I22] 1.08/1.10 primes(I23) -> sieve(nats(2, I23)) 1.08/1.10 mem(I24, cons(I25, B3)) -> mem(I24, B3) [I24 > I25] 1.08/1.10 mem(I26, cons(I27, B4)) -> mem(I26, B4) [I27 > I26] 1.08/1.10 mem(I28, cons(I29, B5)) -> true [I28 = I29] 1.08/1.10 mem(I30, nil) -> false 1.08/1.10 isprime(I31) -> mem(I31, primes(I31)) 1.08/1.10 1.08/1.10 We use the subterm criterion with the projection function NU: 1.08/1.10 NU[if_2#(x0,x1,x2,x3)] = x3 1.08/1.10 NU[filter#(x0,x1)] = x1 1.08/1.10 NU[if_1#(x0,x1,x2,x3)] = x3 1.08/1.10 1.08/1.10 This gives the following inequalities: 1.08/1.10 zs = zs 1.08/1.10 cons(I10, B0) |> B0 1.08/1.10 B1 = B1 1.08/1.10 cons(I14, B2) |> B2 1.08/1.10 1.08/1.10 We remove all the strictly oriented dependency pairs. 1.08/1.10 1.08/1.10 DP problem for innermost termination. 1.08/1.10 P = 1.08/1.10 if_2#(false, I7, I8, zs) -> filter#(I7, zs) 1.08/1.10 if_1#(true, I11, I12, B1) -> filter#(I11, B1) 1.08/1.10 R = 1.08/1.10 isdiv(x, y) -> isdiv(0 - x, y) [0 > x] 1.08/1.10 isdiv(I0, I1) -> isdiv(I0, 0 - I1) [0 > I1] 1.08/1.10 isdiv(I2, I3) -> isdiv(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 isdiv(I4, I5) -> false [I4 > I5 && I5 > 0] 1.08/1.10 isdiv(I6, 0) -> true [I6 > 0] 1.08/1.10 if_2(false, I7, I8, zs) -> cons(I7, filter(I7, zs)) 1.08/1.10 filter(I9, cons(I10, B0)) -> if_2(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 if_1(true, I11, I12, B1) -> filter(I11, B1) 1.08/1.10 filter(I13, cons(I14, B2)) -> if_1(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 filter(I15, nil) -> nil 1.08/1.10 sieve(cons(I16, ys)) -> cons(I16, sieve(filter(I16, ys))) 1.08/1.10 sieve(nil) -> nil 1.08/1.10 nats(I17, I18) -> cons(I17, nats(I17 + 1, I18)) [I18 > I17] 1.08/1.10 nats(I19, I20) -> cons(I19, nil) [I19 = I20] 1.08/1.10 nats(I21, I22) -> nil [I21 > I22] 1.08/1.10 primes(I23) -> sieve(nats(2, I23)) 1.08/1.10 mem(I24, cons(I25, B3)) -> mem(I24, B3) [I24 > I25] 1.08/1.10 mem(I26, cons(I27, B4)) -> mem(I26, B4) [I27 > I26] 1.08/1.10 mem(I28, cons(I29, B5)) -> true [I28 = I29] 1.08/1.10 mem(I30, nil) -> false 1.08/1.10 isprime(I31) -> mem(I31, primes(I31)) 1.08/1.10 1.08/1.10 The dependency graph for this problem is: 1.08/1.10 3 -> 1.08/1.10 6 -> 1.08/1.10 Where: 1.08/1.10 3) if_2#(false, I7, I8, zs) -> filter#(I7, zs) 1.08/1.10 6) if_1#(true, I11, I12, B1) -> filter#(I11, B1) 1.08/1.10 1.08/1.10 We have the following SCCs. 1.08/1.10 1.08/1.10 1.08/1.10 DP problem for innermost termination. 1.08/1.10 P = 1.08/1.10 sieve#(cons(I16, ys)) -> sieve#(filter(I16, ys)) 1.08/1.10 R = 1.08/1.10 isdiv(x, y) -> isdiv(0 - x, y) [0 > x] 1.08/1.10 isdiv(I0, I1) -> isdiv(I0, 0 - I1) [0 > I1] 1.08/1.10 isdiv(I2, I3) -> isdiv(I2, 0 - I2 + I3) [I3 >= I2 && I2 > 0] 1.08/1.10 isdiv(I4, I5) -> false [I4 > I5 && I5 > 0] 1.08/1.10 isdiv(I6, 0) -> true [I6 > 0] 1.08/1.10 if_2(false, I7, I8, zs) -> cons(I7, filter(I7, zs)) 1.08/1.10 filter(I9, cons(I10, B0)) -> if_2(isdiv(I9, I10), I9, I10, B0) 1.08/1.10 if_1(true, I11, I12, B1) -> filter(I11, B1) 1.08/1.10 filter(I13, cons(I14, B2)) -> if_1(isdiv(I13, I14), I13, I14, B2) 1.08/1.10 filter(I15, nil) -> nil 1.08/1.10 sieve(cons(I16, ys)) -> cons(I16, sieve(filter(I16, ys))) 1.08/1.10 sieve(nil) -> nil 1.08/1.10 nats(I17, I18) -> cons(I17, nats(I17 + 1, I18)) [I18 > I17] 1.08/1.10 nats(I19, I20) -> cons(I19, nil) [I19 = I20] 1.08/1.10 nats(I21, I22) -> nil [I21 > I22] 1.08/1.10 primes(I23) -> sieve(nats(2, I23)) 1.08/1.10 mem(I24, cons(I25, B3)) -> mem(I24, B3) [I24 > I25] 1.08/1.10 mem(I26, cons(I27, B4)) -> mem(I26, B4) [I27 > I26] 1.08/1.10 mem(I28, cons(I29, B5)) -> true [I28 = I29] 1.08/1.10 mem(I30, nil) -> false 1.08/1.10 isprime(I31) -> mem(I31, primes(I31)) 1.08/1.10 1.08/1.10 EOF