The rewrite relation of the following equational TRS is considered.
le(0,y) | → | true | (1) |
le(s(x),0) | → | false | (2) |
le(s(x),s(y)) | → | le(x,y) | (3) |
pred(s(x)) | → | x | (4) |
minus(x,0) | → | x | (5) |
minus(x,s(y)) | → | pred(minus(x,y)) | (6) |
gcd(0,y) | → | y | (7) |
gcd(s(x),0) | → | s(x) | (8) |
gcd(s(x),s(y)) | → | if_gcd(le(y,x),s(x),s(y)) | (9) |
if_gcd(true,s(x),s(y)) | → | gcd(minus(x,y),s(y)) | (10) |
if_gcd(false,s(x),s(y)) | → | gcd(minus(y,x),s(x)) | (11) |
Commutative symbols: gcd
The following set of (strict) dependency pairs is constructed for the TRS.
le#(s(x),s(y)) | → | le#(x,y) | (14) |
minus#(x,s(y)) | → | pred#(minus(x,y)) | (15) |
minus#(x,s(y)) | → | minus#(x,y) | (16) |
gcd#(s(x),s(y)) | → | if_gcd#(le(y,x),s(x),s(y)) | (17) |
gcd#(s(x),s(y)) | → | le#(y,x) | (18) |
if_gcd#(true,s(x),s(y)) | → | gcd#(minus(x,y),s(y)) | (19) |
if_gcd#(true,s(x),s(y)) | → | minus#(x,y) | (20) |
if_gcd#(false,s(x),s(y)) | → | gcd#(minus(y,x),s(x)) | (21) |
if_gcd#(false,s(x),s(y)) | → | minus#(y,x) | (22) |
There are no rules.
give rise to even more dependency pairs (by sharping the root symbols of each rule). Finiteness for all DPs in combination with the equational DPs is proven as follows.The dependency pairs are split into 3 components.
gcd#(s(x),s(y)) | → | if_gcd#(le(y,x),s(x),s(y)) | (17) |
if_gcd#(true,s(x),s(y)) | → | gcd#(minus(x,y),s(y)) | (19) |
gcd#(x,y) | → | gcd#(y,x) | (13) |
if_gcd#(false,s(x),s(y)) | → | gcd#(minus(y,x),s(x)) | (21) |
[if_gcd#(x1, x2, x3)] | = | 1 · x2 + 1 · x3 |
[false] | = | 0 |
[s(x1)] | = | 1 + 1 · x1 |
[gcd#(x1, x2)] | = | 1 · x1 + 1 · x2 |
[minus(x1, x2)] | = | 1 · x1 |
[le(x1, x2)] | = | 0 |
[true] | = | 0 |
[pred(x1)] | = | 1 · x1 |
[0] | = | 0 |
minus(x,s(y)) | → | pred(minus(x,y)) | (6) |
minus(x,0) | → | x | (5) |
pred(s(x)) | → | x | (4) |
if_gcd#(false,s(x),s(y)) | → | gcd#(minus(y,x),s(x)) | (21) |
if_gcd#(true,s(x),s(y)) | → | gcd#(minus(x,y),s(y)) | (19) |
The dependency pairs are split into 1 component.
gcd#(x,y) | → | gcd#(y,x) | (13) |
le#(s(x),s(y)) | → | le#(x,y) | (14) |
[le#(x1, x2)] | = | 3 · x1 + 3 · x2 |
[s(x1)] | = | 1 · x1 |
le#(s(x),s(y)) | → | le#(x,y) | (14) |
le(0,y) | → | true | (1) |
le(s(x),0) | → | false | (2) |
le(s(x),s(y)) | → | le(x,y) | (3) |
pred(s(x)) | → | x | (4) |
minus(x,0) | → | x | (5) |
minus(x,s(y)) | → | pred(minus(x,y)) | (6) |
gcd(0,y) | → | y | (7) |
gcd(s(x),0) | → | s(x) | (8) |
gcd(s(x),s(y)) | → | if_gcd(le(y,x),s(x),s(y)) | (9) |
if_gcd(true,s(x),s(y)) | → | gcd(minus(x,y),s(y)) | (10) |
if_gcd(false,s(x),s(y)) | → | gcd(minus(y,x),s(x)) | (11) |
minus#(x,s(y)) | → | minus#(x,y) | (16) |
[minus#(x1, x2)] | = | 1 · x1 + 3 · x2 |
[s(x1)] | = | 3 · x1 |
minus#(x,s(y)) | → | minus#(x,y) | (16) |
le(0,y) | → | true | (1) |
le(s(x),0) | → | false | (2) |
le(s(x),s(y)) | → | le(x,y) | (3) |
pred(s(x)) | → | x | (4) |
minus(x,0) | → | x | (5) |
minus(x,s(y)) | → | pred(minus(x,y)) | (6) |
gcd(0,y) | → | y | (7) |
gcd(s(x),0) | → | s(x) | (8) |
gcd(s(x),s(y)) | → | if_gcd(le(y,x),s(x),s(y)) | (9) |
if_gcd(true,s(x),s(y)) | → | gcd(minus(x,y),s(y)) | (10) |
if_gcd(false,s(x),s(y)) | → | gcd(minus(y,x),s(x)) | (11) |