YES

The TRS could be proven terminating. The proof took 3193 ms.

The following DP Processors were used


Problem 1 was processed with processor DependencyGraph (1138ms).
 | – Problem 2 was processed with processor SubtermCriterion (2ms).
 | – Problem 3 was processed with processor SubtermCriterion (0ms).
 | – Problem 4 was processed with processor SubtermCriterion (1ms).
 | – Problem 5 was processed with processor SubtermCriterion (0ms).
 |    | – Problem 16 was processed with processor SubtermCriterion (1ms).
 | – Problem 6 was processed with processor SubtermCriterion (1ms).
 | – Problem 7 was processed with processor SubtermCriterion (0ms).
 | – Problem 8 was processed with processor SubtermCriterion (0ms).
 | – Problem 9 was processed with processor SubtermCriterion (0ms).
 | – Problem 10 was processed with processor PolynomialLinearRange4iUR (412ms).
 |    | – Problem 17 was processed with processor PolynomialLinearRange4iUR (97ms).
 |    |    | – Problem 21 was processed with processor PolynomialLinearRange4iUR (82ms).
 | – Problem 11 was processed with processor PolynomialLinearRange4iUR (116ms).
 |    | – Problem 18 was processed with processor PolynomialLinearRange4iUR (10ms).
 | – Problem 12 was processed with processor PolynomialLinearRange4iUR (337ms).
 |    | – Problem 19 was processed with processor PolynomialLinearRange4iUR (226ms).
 |    |    | – Problem 22 was processed with processor PolynomialLinearRange4iUR (218ms).
 |    |    |    | – Problem 23 was processed with processor PolynomialLinearRange4iUR (148ms).
 |    |    |    |    | – Problem 24 was processed with processor DependencyGraph (1ms).
 | – Problem 13 was processed with processor PolynomialLinearRange4iUR (127ms).
 |    | – Problem 20 was processed with processor PolynomialLinearRange4iUR (79ms).
 | – Problem 14 was processed with processor SubtermCriterion (0ms).
 | – Problem 15 was processed with processor SubtermCriterion (0ms).

Problem 1: DependencyGraph



Dependency Pair Problem

Dependency Pairs

-#(1(x), 1(y)) → 0#(-(x, y))+#(0(x), 0(y)) → +#(x, y)
-#(0(x), 1(y)) → -#(x, y)-#(0(x), 0(y)) → -#(x, y)
log'#(1(x)) → +#(log'(x), 1(#))app#(cons(x, l1), l2) → app#(l1, l2)
inter#(l1, cons(x, l2)) → ifinter#(mem(x, l1), x, l2, l1)sum#(nil) → 0#(#)
mem#(x, cons(y, l)) → if#(eq(x, y), true, mem(x, l))*#(x, +(y, z)) → *#(x, y)
prod#(app(l1, l2)) → prod#(l2)sum#(app(l1, l2)) → sum#(l2)
+#(1(x), 0(y)) → +#(x, y)log#(x) → -#(log'(x), 1(#))
log'#(0(x)) → if#(ge(x, 1(#)), +(log'(x), 1(#)), #)ge#(1(x), 1(y)) → ge#(x, y)
ge#(0(x), 1(y)) → ge#(y, x)*#(*(x, y), z) → *#(y, z)
sum#(cons(x, l)) → sum#(l)inter#(cons(x, l1), l2) → ifinter#(mem(x, l2), x, l1, l2)
log'#(0(x)) → ge#(x, 1(#))ge#(1(x), 0(y)) → ge#(x, y)
eq#(#, 0(y)) → eq#(#, y)*#(1(x), y) → *#(x, y)
log'#(1(x)) → log'#(x)*#(1(x), y) → 0#(*(x, y))
inter#(app(l1, l2), l3) → inter#(l1, l3)log'#(0(x)) → log'#(x)
+#(1(x), 1(y)) → +#(x, y)ge#(#, 0(x)) → ge#(#, x)
ge#(0(x), 1(y)) → not#(ge(y, x))-#(0(x), 0(y)) → 0#(-(x, y))
eq#(0(x), 0(y)) → eq#(x, y)*#(*(x, y), z) → *#(x, *(y, z))
log'#(0(x)) → +#(log'(x), 1(#))+#(+(x, y), z) → +#(y, z)
*#(0(x), y) → 0#(*(x, y))prod#(cons(x, l)) → *#(x, prod(l))
sum#(cons(x, l)) → +#(x, sum(l))+#(+(x, y), z) → +#(x, +(y, z))
+#(0(x), 0(y)) → 0#(+(x, y))inter#(app(l1, l2), l3) → app#(inter(l1, l3), inter(l2, l3))
ifinter#(true, x, l1, l2) → inter#(l1, l2)inter#(cons(x, l1), l2) → mem#(x, l2)
*#(x, +(y, z)) → +#(*(x, y), *(x, z))log#(x) → log'#(x)
eq#(1(x), 1(y)) → eq#(x, y)ifinter#(false, x, l1, l2) → inter#(l1, l2)
*#(0(x), y) → *#(x, y)-#(1(x), 1(y)) → -#(x, y)
sum#(app(l1, l2)) → +#(sum(l1), sum(l2))+#(1(x), 1(y)) → 0#(+(+(x, y), 1(#)))
+#(0(x), 1(y)) → +#(x, y)-#(1(x), 0(y)) → -#(x, y)
inter#(app(l1, l2), l3) → inter#(l2, l3)-#(0(x), 1(y)) → -#(-(x, y), 1(#))
+#(1(x), 1(y)) → +#(+(x, y), 1(#))eq#(0(x), #) → eq#(x, #)
inter#(l1, app(l2, l3)) → app#(inter(l1, l2), inter(l1, l3))*#(1(x), y) → +#(0(*(x, y)), y)
prod#(app(l1, l2)) → *#(prod(l1), prod(l2))inter#(l1, app(l2, l3)) → inter#(l1, l3)
*#(x, +(y, z)) → *#(x, z)prod#(cons(x, l)) → prod#(l)
inter#(l1, cons(x, l2)) → mem#(x, l1)mem#(x, cons(y, l)) → mem#(x, l)
sum#(app(l1, l2)) → sum#(l1)prod#(app(l1, l2)) → prod#(l1)
inter#(l1, app(l2, l3)) → inter#(l1, l2)ge#(0(x), 0(y)) → ge#(x, y)
mem#(x, cons(y, l)) → eq#(x, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


The following SCCs where found

log'#(1(x)) → log'#(x)log'#(0(x)) → log'#(x)

sum#(app(l1, l2)) → sum#(l1)sum#(cons(x, l)) → sum#(l)
sum#(app(l1, l2)) → sum#(l2)

eq#(0(x), 0(y)) → eq#(x, y)eq#(1(x), 1(y)) → eq#(x, y)

inter#(l1, app(l2, l3)) → inter#(l1, l3)inter#(l1, app(l2, l3)) → inter#(l1, l2)
ifinter#(true, x, l1, l2) → inter#(l1, l2)inter#(app(l1, l2), l3) → inter#(l2, l3)
inter#(l1, cons(x, l2)) → ifinter#(mem(x, l1), x, l2, l1)ifinter#(false, x, l1, l2) → inter#(l1, l2)
inter#(cons(x, l1), l2) → ifinter#(mem(x, l2), x, l1, l2)inter#(app(l1, l2), l3) → inter#(l1, l3)

+#(0(x), 1(y)) → +#(x, y)+#(0(x), 0(y)) → +#(x, y)
+#(+(x, y), z) → +#(y, z)+#(1(x), 1(y)) → +#(x, y)
+#(1(x), 1(y)) → +#(+(x, y), 1(#))+#(1(x), 0(y)) → +#(x, y)
+#(+(x, y), z) → +#(x, +(y, z))

eq#(0(x), #) → eq#(x, #)

*#(x, +(y, z)) → *#(x, z)*#(1(x), y) → *#(x, y)
*#(*(x, y), z) → *#(x, *(y, z))*#(*(x, y), z) → *#(y, z)
*#(x, +(y, z)) → *#(x, y)*#(0(x), y) → *#(x, y)

-#(1(x), 0(y)) → -#(x, y)-#(0(x), 1(y)) → -#(x, y)
-#(0(x), 1(y)) → -#(-(x, y), 1(#))-#(1(x), 1(y)) → -#(x, y)
-#(0(x), 0(y)) → -#(x, y)

eq#(#, 0(y)) → eq#(#, y)

app#(cons(x, l1), l2) → app#(l1, l2)

mem#(x, cons(y, l)) → mem#(x, l)

ge#(1(x), 1(y)) → ge#(x, y)ge#(0(x), 1(y)) → ge#(y, x)
ge#(0(x), 0(y)) → ge#(x, y)ge#(1(x), 0(y)) → ge#(x, y)

prod#(cons(x, l)) → prod#(l)prod#(app(l1, l2)) → prod#(l1)
prod#(app(l1, l2)) → prod#(l2)

ge#(#, 0(x)) → ge#(#, x)

Problem 2: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

eq#(#, 0(y)) → eq#(#, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

eq#(#, 0(y)) → eq#(#, y)

Problem 3: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

sum#(app(l1, l2)) → sum#(l1)sum#(cons(x, l)) → sum#(l)
sum#(app(l1, l2)) → sum#(l2)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

sum#(app(l1, l2)) → sum#(l1)sum#(cons(x, l)) → sum#(l)
sum#(app(l1, l2)) → sum#(l2)

Problem 4: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

mem#(x, cons(y, l)) → mem#(x, l)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

mem#(x, cons(y, l)) → mem#(x, l)

Problem 5: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

*#(x, +(y, z)) → *#(x, z)*#(1(x), y) → *#(x, y)
*#(*(x, y), z) → *#(x, *(y, z))*#(*(x, y), z) → *#(y, z)
*#(x, +(y, z)) → *#(x, y)*#(0(x), y) → *#(x, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

*#(1(x), y) → *#(x, y)*#(*(x, y), z) → *#(y, z)
*#(*(x, y), z) → *#(x, *(y, z))*#(0(x), y) → *#(x, y)

Problem 16: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

*#(x, +(y, z)) → *#(x, z)*#(x, +(y, z)) → *#(x, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, prod, cons, nil, eq

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

*#(x, +(y, z)) → *#(x, z)*#(x, +(y, z)) → *#(x, y)

Problem 6: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

log'#(1(x)) → log'#(x)log'#(0(x)) → log'#(x)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

log'#(1(x)) → log'#(x)log'#(0(x)) → log'#(x)

Problem 7: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

eq#(0(x), #) → eq#(x, #)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

eq#(0(x), #) → eq#(x, #)

Problem 8: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

eq#(0(x), 0(y)) → eq#(x, y)eq#(1(x), 1(y)) → eq#(x, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

eq#(0(x), 0(y)) → eq#(x, y)eq#(1(x), 1(y)) → eq#(x, y)

Problem 9: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

ge#(#, 0(x)) → ge#(#, x)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

ge#(#, 0(x)) → ge#(#, x)

Problem 10: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

+#(0(x), 1(y)) → +#(x, y)+#(0(x), 0(y)) → +#(x, y)
+#(+(x, y), z) → +#(y, z)+#(1(x), 1(y)) → +#(x, y)
+#(1(x), 1(y)) → +#(+(x, y), 1(#))+#(1(x), 0(y)) → +#(x, y)
+#(+(x, y), z) → +#(x, +(y, z))

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Polynomial Interpretation

Improved Usable rules

+(+(x, y), z) → +(x, +(y, z))+(0(x), 0(y)) → 0(+(x, y))
+(1(x), 0(y)) → 1(+(x, y))0(#) → #
+(x, #) → x+(0(x), 1(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(#, x) → x

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

+#(0(x), 1(y)) → +#(x, y)+#(1(x), 1(y)) → +#(x, y)
+#(1(x), 1(y)) → +#(+(x, y), 1(#))+#(1(x), 0(y)) → +#(x, y)

Problem 17: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

+#(0(x), 0(y)) → +#(x, y)+#(+(x, y), z) → +#(y, z)
+#(+(x, y), z) → +#(x, +(y, z))

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, prod, cons, nil, eq

Strategy


Polynomial Interpretation

Improved Usable rules

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

+#(0(x), 0(y)) → +#(x, y)

Problem 21: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

+#(+(x, y), z) → +#(y, z)+#(+(x, y), z) → +#(x, +(y, z))

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Polynomial Interpretation

Improved Usable rules

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

+#(+(x, y), z) → +#(y, z)+#(+(x, y), z) → +#(x, +(y, z))

Problem 11: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

ge#(1(x), 1(y)) → ge#(x, y)ge#(0(x), 1(y)) → ge#(y, x)
ge#(0(x), 0(y)) → ge#(x, y)ge#(1(x), 0(y)) → ge#(x, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Polynomial Interpretation

There are no usable rules

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

ge#(1(x), 1(y)) → ge#(x, y)ge#(0(x), 1(y)) → ge#(y, x)
ge#(1(x), 0(y)) → ge#(x, y)

Problem 18: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

ge#(0(x), 0(y)) → ge#(x, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, prod, cons, nil, eq

Strategy


Polynomial Interpretation

There are no usable rules

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

ge#(0(x), 0(y)) → ge#(x, y)

Problem 12: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

inter#(l1, app(l2, l3)) → inter#(l1, l3)inter#(l1, app(l2, l3)) → inter#(l1, l2)
ifinter#(true, x, l1, l2) → inter#(l1, l2)inter#(app(l1, l2), l3) → inter#(l2, l3)
inter#(l1, cons(x, l2)) → ifinter#(mem(x, l1), x, l2, l1)ifinter#(false, x, l1, l2) → inter#(l1, l2)
inter#(cons(x, l1), l2) → ifinter#(mem(x, l2), x, l1, l2)inter#(app(l1, l2), l3) → inter#(l1, l3)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Polynomial Interpretation

Improved Usable rules

if(false, x, y) → ymem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))if(true, x, y) → x

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

ifinter#(false, x, l1, l2) → inter#(l1, l2)

Problem 19: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

inter#(l1, app(l2, l3)) → inter#(l1, l3)inter#(l1, app(l2, l3)) → inter#(l1, l2)
ifinter#(true, x, l1, l2) → inter#(l1, l2)inter#(l1, cons(x, l2)) → ifinter#(mem(x, l1), x, l2, l1)
inter#(app(l1, l2), l3) → inter#(l2, l3)inter#(app(l1, l2), l3) → inter#(l1, l3)
inter#(cons(x, l1), l2) → ifinter#(mem(x, l2), x, l1, l2)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, prod, cons, nil, eq

Strategy


Polynomial Interpretation

Improved Usable rules

if(false, x, y) → ymem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))if(true, x, y) → x

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

inter#(l1, app(l2, l3)) → inter#(l1, l3)inter#(l1, app(l2, l3)) → inter#(l1, l2)
inter#(app(l1, l2), l3) → inter#(l2, l3)inter#(app(l1, l2), l3) → inter#(l1, l3)

Problem 22: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

ifinter#(true, x, l1, l2) → inter#(l1, l2)inter#(l1, cons(x, l2)) → ifinter#(mem(x, l1), x, l2, l1)
inter#(cons(x, l1), l2) → ifinter#(mem(x, l2), x, l1, l2)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Polynomial Interpretation

Improved Usable rules

if(false, x, y) → ymem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))if(true, x, y) → x

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

inter#(cons(x, l1), l2) → ifinter#(mem(x, l2), x, l1, l2)

Problem 23: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

ifinter#(true, x, l1, l2) → inter#(l1, l2)inter#(l1, cons(x, l2)) → ifinter#(mem(x, l1), x, l2, l1)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, prod, cons, nil, eq

Strategy


Polynomial Interpretation

Improved Usable rules

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

inter#(l1, cons(x, l2)) → ifinter#(mem(x, l1), x, l2, l1)

Problem 24: DependencyGraph



Dependency Pair Problem

Dependency Pairs

ifinter#(true, x, l1, l2) → inter#(l1, l2)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


There are no SCCs!

Problem 13: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

-#(1(x), 0(y)) → -#(x, y)-#(0(x), 1(y)) → -#(x, y)
-#(0(x), 1(y)) → -#(-(x, y), 1(#))-#(1(x), 1(y)) → -#(x, y)
-#(0(x), 0(y)) → -#(x, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Polynomial Interpretation

Improved Usable rules

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

-#(1(x), 0(y)) → -#(x, y)-#(0(x), 0(y)) → -#(x, y)

Problem 20: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

-#(0(x), 1(y)) → -#(x, y)-#(0(x), 1(y)) → -#(-(x, y), 1(#))
-#(1(x), 1(y)) → -#(x, y)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, prod, cons, nil, eq

Strategy


Polynomial Interpretation

Improved Usable rules

-(1(x), 1(y)) → 0(-(x, y))0(#) → #
-(0(x), 0(y)) → 0(-(x, y))-(1(x), 0(y)) → 1(-(x, y))
-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))-(x, #) → x
-(#, x) → #

The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:

-#(0(x), 1(y)) → -#(x, y)-#(0(x), 1(y)) → -#(-(x, y), 1(#))
-#(1(x), 1(y)) → -#(x, y)

Problem 14: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

app#(cons(x, l1), l2) → app#(l1, l2)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

app#(cons(x, l1), l2) → app#(l1, l2)

Problem 15: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

prod#(cons(x, l)) → prod#(l)prod#(app(l1, l2)) → prod#(l1)
prod#(app(l1, l2)) → prod#(l2)

Rewrite Rules

0(#) → #+(x, #) → x
+(#, x) → x+(0(x), 0(y)) → 0(+(x, y))
+(0(x), 1(y)) → 1(+(x, y))+(1(x), 0(y)) → 1(+(x, y))
+(1(x), 1(y)) → 0(+(+(x, y), 1(#)))+(+(x, y), z) → +(x, +(y, z))
-(#, x) → #-(x, #) → x
-(0(x), 0(y)) → 0(-(x, y))-(0(x), 1(y)) → 1(-(-(x, y), 1(#)))
-(1(x), 0(y)) → 1(-(x, y))-(1(x), 1(y)) → 0(-(x, y))
not(true) → falsenot(false) → true
if(true, x, y) → xif(false, x, y) → y
eq(#, #) → trueeq(#, 1(y)) → false
eq(1(x), #) → falseeq(#, 0(y)) → eq(#, y)
eq(0(x), #) → eq(x, #)eq(1(x), 1(y)) → eq(x, y)
eq(0(x), 1(y)) → falseeq(1(x), 0(y)) → false
eq(0(x), 0(y)) → eq(x, y)ge(0(x), 0(y)) → ge(x, y)
ge(0(x), 1(y)) → not(ge(y, x))ge(1(x), 0(y)) → ge(x, y)
ge(1(x), 1(y)) → ge(x, y)ge(x, #) → true
ge(#, 0(x)) → ge(#, x)ge(#, 1(x)) → false
log(x) → -(log'(x), 1(#))log'(#) → #
log'(1(x)) → +(log'(x), 1(#))log'(0(x)) → if(ge(x, 1(#)), +(log'(x), 1(#)), #)
*(#, x) → #*(0(x), y) → 0(*(x, y))
*(1(x), y) → +(0(*(x, y)), y)*(*(x, y), z) → *(x, *(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))app(nil, l) → l
app(cons(x, l1), l2) → cons(x, app(l1, l2))sum(nil) → 0(#)
sum(cons(x, l)) → +(x, sum(l))sum(app(l1, l2)) → +(sum(l1), sum(l2))
prod(nil) → 1(#)prod(cons(x, l)) → *(x, prod(l))
prod(app(l1, l2)) → *(prod(l1), prod(l2))mem(x, nil) → false
mem(x, cons(y, l)) → if(eq(x, y), true, mem(x, l))inter(x, nil) → nil
inter(nil, x) → nilinter(app(l1, l2), l3) → app(inter(l1, l3), inter(l2, l3))
inter(l1, app(l2, l3)) → app(inter(l1, l2), inter(l1, l3))inter(cons(x, l1), l2) → ifinter(mem(x, l2), x, l1, l2)
inter(l1, cons(x, l2)) → ifinter(mem(x, l1), x, l2, l1)ifinter(true, x, l1, l2) → cons(x, inter(l1, l2))
ifinter(false, x, l1, l2) → inter(l1, l2)

Original Signature

Termination of terms over the following signature is verified: app, #, log', *, sum, +, true, ge, log, -, inter, not, 1, 0, if, mem, false, ifinter, eq, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

prod#(cons(x, l)) → prod#(l)prod#(app(l1, l2)) → prod#(l1)
prod#(app(l1, l2)) → prod#(l2)