YES

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

The following DP Processors were used


Problem 1 was processed with processor DependencyGraph (179ms).
 | – Problem 2 was processed with processor SubtermCriterion (2ms).
 | – Problem 3 was processed with processor SubtermCriterion (2ms).
 | – Problem 4 was processed with processor SubtermCriterion (2ms).
 | – Problem 5 was processed with processor SubtermCriterion (2ms).
 | – Problem 6 was processed with processor SubtermCriterion (1ms).

Problem 1: DependencyGraph



Dependency Pair Problem

Dependency Pairs

sum#(app(l1, l2)) → +#(sum(l1), sum(l2))*#(s(x), s(y)) → +#(x, y)
*#(*(x, y), z) → *#(x, *(y, z))*#(*(x, y), z) → *#(y, z)
+#(+(x, y), z) → +#(y, z)sum#(cons(x, l)) → sum#(l)
prod#(cons(x, l)) → *#(x, prod(l))sum#(cons(x, l)) → +#(x, sum(l))
+#(s(x), s(y)) → +#(x, y)+#(+(x, y), z) → +#(x, +(y, z))
prod#(app(l1, l2)) → *#(prod(l1), prod(l2))prod#(cons(x, l)) → prod#(l)
app#(cons(x, l1), l2) → app#(l1, l2)sum#(app(l1, l2)) → sum#(l1)
prod#(app(l1, l2)) → prod#(l1)*#(s(x), s(y)) → *#(x, y)
*#(s(x), s(y)) → +#(*(x, y), +(x, y))prod#(app(l1, l2)) → prod#(l2)
sum#(app(l1, l2)) → sum#(l2)

Rewrite Rules

+(x, 0) → x+(0, x) → x
+(s(x), s(y)) → s(s(+(x, y)))+(+(x, y), z) → +(x, +(y, z))
*(x, 0) → 0*(0, x) → 0
*(s(x), s(y)) → s(+(*(x, y), +(x, y)))*(*(x, y), z) → *(x, *(y, z))
app(nil, l) → lapp(cons(x, l1), l2) → cons(x, app(l1, l2))
sum(nil) → 0sum(cons(x, l)) → +(x, sum(l))
sum(app(l1, l2)) → +(sum(l1), sum(l2))prod(nil) → s(0)
prod(cons(x, l)) → *(x, prod(l))prod(app(l1, l2)) → *(prod(l1), prod(l2))

Original Signature

Termination of terms over the following signature is verified: app, 0, s, *, +, sum, nil, cons, prod

Strategy


The following SCCs where found

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

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

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

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

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

Problem 2: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

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

Rewrite Rules

+(x, 0) → x+(0, x) → x
+(s(x), s(y)) → s(s(+(x, y)))+(+(x, y), z) → +(x, +(y, z))
*(x, 0) → 0*(0, x) → 0
*(s(x), s(y)) → s(+(*(x, y), +(x, y)))*(*(x, y), z) → *(x, *(y, z))
app(nil, l) → lapp(cons(x, l1), l2) → cons(x, app(l1, l2))
sum(nil) → 0sum(cons(x, l)) → +(x, sum(l))
sum(app(l1, l2)) → +(sum(l1), sum(l2))prod(nil) → s(0)
prod(cons(x, l)) → *(x, prod(l))prod(app(l1, l2)) → *(prod(l1), prod(l2))

Original Signature

Termination of terms over the following signature is verified: app, 0, s, *, +, sum, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

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

Problem 3: 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

+(x, 0) → x+(0, x) → x
+(s(x), s(y)) → s(s(+(x, y)))+(+(x, y), z) → +(x, +(y, z))
*(x, 0) → 0*(0, x) → 0
*(s(x), s(y)) → s(+(*(x, y), +(x, y)))*(*(x, y), z) → *(x, *(y, z))
app(nil, l) → lapp(cons(x, l1), l2) → cons(x, app(l1, l2))
sum(nil) → 0sum(cons(x, l)) → +(x, sum(l))
sum(app(l1, l2)) → +(sum(l1), sum(l2))prod(nil) → s(0)
prod(cons(x, l)) → *(x, prod(l))prod(app(l1, l2)) → *(prod(l1), prod(l2))

Original Signature

Termination of terms over the following signature is verified: app, 0, s, *, +, sum, 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)

Problem 4: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

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

Rewrite Rules

+(x, 0) → x+(0, x) → x
+(s(x), s(y)) → s(s(+(x, y)))+(+(x, y), z) → +(x, +(y, z))
*(x, 0) → 0*(0, x) → 0
*(s(x), s(y)) → s(+(*(x, y), +(x, y)))*(*(x, y), z) → *(x, *(y, z))
app(nil, l) → lapp(cons(x, l1), l2) → cons(x, app(l1, l2))
sum(nil) → 0sum(cons(x, l)) → +(x, sum(l))
sum(app(l1, l2)) → +(sum(l1), sum(l2))prod(nil) → s(0)
prod(cons(x, l)) → *(x, prod(l))prod(app(l1, l2)) → *(prod(l1), prod(l2))

Original Signature

Termination of terms over the following signature is verified: app, 0, s, *, +, sum, nil, cons, prod

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

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

Problem 5: 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

+(x, 0) → x+(0, x) → x
+(s(x), s(y)) → s(s(+(x, y)))+(+(x, y), z) → +(x, +(y, z))
*(x, 0) → 0*(0, x) → 0
*(s(x), s(y)) → s(+(*(x, y), +(x, y)))*(*(x, y), z) → *(x, *(y, z))
app(nil, l) → lapp(cons(x, l1), l2) → cons(x, app(l1, l2))
sum(nil) → 0sum(cons(x, l)) → +(x, sum(l))
sum(app(l1, l2)) → +(sum(l1), sum(l2))prod(nil) → s(0)
prod(cons(x, l)) → *(x, prod(l))prod(app(l1, l2)) → *(prod(l1), prod(l2))

Original Signature

Termination of terms over the following signature is verified: app, 0, s, *, +, sum, 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 6: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

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

Rewrite Rules

+(x, 0) → x+(0, x) → x
+(s(x), s(y)) → s(s(+(x, y)))+(+(x, y), z) → +(x, +(y, z))
*(x, 0) → 0*(0, x) → 0
*(s(x), s(y)) → s(+(*(x, y), +(x, y)))*(*(x, y), z) → *(x, *(y, z))
app(nil, l) → lapp(cons(x, l1), l2) → cons(x, app(l1, l2))
sum(nil) → 0sum(cons(x, l)) → +(x, sum(l))
sum(app(l1, l2)) → +(sum(l1), sum(l2))prod(nil) → s(0)
prod(cons(x, l)) → *(x, prod(l))prod(app(l1, l2)) → *(prod(l1), prod(l2))

Original Signature

Termination of terms over the following signature is verified: app, 0, s, *, +, sum, 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)