YES

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

The following DP Processors were used


Problem 1 was processed with processor DependencyGraph (41ms).
 | – Problem 2 was processed with processor SubtermCriterion (1ms).
 | – Problem 3 was processed with processor SubtermCriterion (1ms).
 | – Problem 4 was processed with processor PolynomialLinearRange4iUR (308ms).
 |    | – Problem 5 was processed with processor PolynomialLinearRange4iUR (153ms).
 |    |    | – Problem 6 was processed with processor DependencyGraph (15ms).

Problem 1: DependencyGraph



Dependency Pair Problem

Dependency Pairs

if#(true, s(X), s(Y)) → minus#(X, Y)minus#(X, s(Y)) → pred#(minus(X, Y))
gcd#(s(X), s(Y)) → le#(Y, X)if#(true, s(X), s(Y)) → gcd#(minus(X, Y), s(Y))
if#(false, s(X), s(Y)) → gcd#(minus(Y, X), s(X))gcd#(s(X), s(Y)) → if#(le(Y, X), s(X), s(Y))
if#(false, s(X), s(Y)) → minus#(Y, X)minus#(X, s(Y)) → minus#(X, Y)
le#(s(X), s(Y)) → le#(X, Y)

Rewrite Rules

minus(X, s(Y)) → pred(minus(X, Y))minus(X, 0) → X
pred(s(X)) → Xle(s(X), s(Y)) → le(X, Y)
le(s(X), 0) → falsele(0, Y) → true
gcd(0, Y) → 0gcd(s(X), 0) → s(X)
gcd(s(X), s(Y)) → if(le(Y, X), s(X), s(Y))if(true, s(X), s(Y)) → gcd(minus(X, Y), s(Y))
if(false, s(X), s(Y)) → gcd(minus(Y, X), s(X))

Original Signature

Termination of terms over the following signature is verified: minus, 0, s, le, if, false, true, pred, gcd

Strategy


The following SCCs where found

if#(true, s(X), s(Y)) → gcd#(minus(X, Y), s(Y))if#(false, s(X), s(Y)) → gcd#(minus(Y, X), s(X))
gcd#(s(X), s(Y)) → if#(le(Y, X), s(X), s(Y))

minus#(X, s(Y)) → minus#(X, Y)

le#(s(X), s(Y)) → le#(X, Y)

Problem 2: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

le#(s(X), s(Y)) → le#(X, Y)

Rewrite Rules

minus(X, s(Y)) → pred(minus(X, Y))minus(X, 0) → X
pred(s(X)) → Xle(s(X), s(Y)) → le(X, Y)
le(s(X), 0) → falsele(0, Y) → true
gcd(0, Y) → 0gcd(s(X), 0) → s(X)
gcd(s(X), s(Y)) → if(le(Y, X), s(X), s(Y))if(true, s(X), s(Y)) → gcd(minus(X, Y), s(Y))
if(false, s(X), s(Y)) → gcd(minus(Y, X), s(X))

Original Signature

Termination of terms over the following signature is verified: minus, 0, s, le, if, false, true, pred, gcd

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

le#(s(X), s(Y)) → le#(X, Y)

Problem 3: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

minus#(X, s(Y)) → minus#(X, Y)

Rewrite Rules

minus(X, s(Y)) → pred(minus(X, Y))minus(X, 0) → X
pred(s(X)) → Xle(s(X), s(Y)) → le(X, Y)
le(s(X), 0) → falsele(0, Y) → true
gcd(0, Y) → 0gcd(s(X), 0) → s(X)
gcd(s(X), s(Y)) → if(le(Y, X), s(X), s(Y))if(true, s(X), s(Y)) → gcd(minus(X, Y), s(Y))
if(false, s(X), s(Y)) → gcd(minus(Y, X), s(X))

Original Signature

Termination of terms over the following signature is verified: minus, 0, s, le, if, false, true, pred, gcd

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

minus#(X, s(Y)) → minus#(X, Y)

Problem 4: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

if#(true, s(X), s(Y)) → gcd#(minus(X, Y), s(Y))if#(false, s(X), s(Y)) → gcd#(minus(Y, X), s(X))
gcd#(s(X), s(Y)) → if#(le(Y, X), s(X), s(Y))

Rewrite Rules

minus(X, s(Y)) → pred(minus(X, Y))minus(X, 0) → X
pred(s(X)) → Xle(s(X), s(Y)) → le(X, Y)
le(s(X), 0) → falsele(0, Y) → true
gcd(0, Y) → 0gcd(s(X), 0) → s(X)
gcd(s(X), s(Y)) → if(le(Y, X), s(X), s(Y))if(true, s(X), s(Y)) → gcd(minus(X, Y), s(Y))
if(false, s(X), s(Y)) → gcd(minus(Y, X), s(X))

Original Signature

Termination of terms over the following signature is verified: minus, 0, s, le, if, false, true, pred, gcd

Strategy


Polynomial Interpretation

Improved Usable rules

pred(s(X)) → Xminus(X, 0) → X
le(s(X), s(Y)) → le(X, Y)minus(X, s(Y)) → pred(minus(X, Y))
le(0, Y) → truele(s(X), 0) → false

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

if#(false, s(X), s(Y)) → gcd#(minus(Y, X), s(X))

Problem 5: PolynomialLinearRange4iUR



Dependency Pair Problem

Dependency Pairs

if#(true, s(X), s(Y)) → gcd#(minus(X, Y), s(Y))gcd#(s(X), s(Y)) → if#(le(Y, X), s(X), s(Y))

Rewrite Rules

minus(X, s(Y)) → pred(minus(X, Y))minus(X, 0) → X
pred(s(X)) → Xle(s(X), s(Y)) → le(X, Y)
le(s(X), 0) → falsele(0, Y) → true
gcd(0, Y) → 0gcd(s(X), 0) → s(X)
gcd(s(X), s(Y)) → if(le(Y, X), s(X), s(Y))if(true, s(X), s(Y)) → gcd(minus(X, Y), s(Y))
if(false, s(X), s(Y)) → gcd(minus(Y, X), s(X))

Original Signature

Termination of terms over the following signature is verified: 0, minus, le, s, if, true, false, pred, gcd

Strategy


Polynomial Interpretation

Improved Usable rules

pred(s(X)) → Xminus(X, 0) → X
minus(X, s(Y)) → pred(minus(X, Y))

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

if#(true, s(X), s(Y)) → gcd#(minus(X, Y), s(Y))

Problem 6: DependencyGraph



Dependency Pair Problem

Dependency Pairs

gcd#(s(X), s(Y)) → if#(le(Y, X), s(X), s(Y))

Rewrite Rules

minus(X, s(Y)) → pred(minus(X, Y))minus(X, 0) → X
pred(s(X)) → Xle(s(X), s(Y)) → le(X, Y)
le(s(X), 0) → falsele(0, Y) → true
gcd(0, Y) → 0gcd(s(X), 0) → s(X)
gcd(s(X), s(Y)) → if(le(Y, X), s(X), s(Y))if(true, s(X), s(Y)) → gcd(minus(X, Y), s(Y))
if(false, s(X), s(Y)) → gcd(minus(Y, X), s(X))

Original Signature

Termination of terms over the following signature is verified: minus, 0, s, le, if, false, true, pred, gcd

Strategy


There are no SCCs!