YES
fst(0, Z) → nil
fst(s(X), cons(Y, Z)) → cons(Y, fst(X, Z))
from(X) → cons(X, from(s(X)))
add(0, X) → X
add(s(X), Y) → s(add(X, Y))
len(nil) → 0
len(cons(X, Z)) → s(len(Z))
fst: {1, 2}
0: empty set
nil: empty set
s: empty set
cons: {1}
from: {1}
add: {1, 2}
len: {1}
↳ CSR
↳ Lucas-Transformation
fst(0, Z) → nil
fst(s(X), cons(Y, Z)) → cons(Y, fst(X, Z))
from(X) → cons(X, from(s(X)))
add(0, X) → X
add(s(X), Y) → s(add(X, Y))
len(nil) → 0
len(cons(X, Z)) → s(len(Z))
fst: {1, 2}
0: empty set
nil: empty set
s: empty set
cons: {1}
from: {1}
add: {1, 2}
len: {1}
We applied the Lucas [26] to transform the context-sensitive TRS to an usual TRS.
↳ CSR
↳ Lucas-Transformation
↳ QTRS
↳ RRRPoloQTRSProof
fst(0, Z) → nil
fst(s, cons(Y)) → cons(Y)
from(X) → cons(X)
add(0, X) → X
add(s, Y) → s
len(nil) → 0
len(cons(X)) → s
fst(0, Z) → nil
fst(s, cons(Y)) → cons(Y)
from(X) → cons(X)
add(0, X) → X
add(s, Y) → s
len(nil) → 0
len(cons(X)) → s
Used ordering:
fst(0, Z) → nil
fst(s, cons(Y)) → cons(Y)
add(0, X) → X
add(s, Y) → s
len(nil) → 0
len(cons(X)) → s
POL(0) = 2
POL(add(x1, x2)) = 2 + 2·x1 + x2
POL(cons(x1)) = 2 + x1
POL(from(x1)) = 2 + 2·x1
POL(fst(x1, x2)) = 1 + 2·x1 + 2·x2
POL(len(x1)) = 2 + 2·x1
POL(nil) = 1
POL(s) = 1
↳ CSR
↳ Lucas-Transformation
↳ QTRS
↳ RRRPoloQTRSProof
↳ QTRS
↳ RRRPoloQTRSProof
from(X) → cons(X)
from(X) → cons(X)
Used ordering:
from(X) → cons(X)
POL(cons(x1)) = 1 + x1
POL(from(x1)) = 2 + 2·x1
↳ CSR
↳ Lucas-Transformation
↳ QTRS
↳ RRRPoloQTRSProof
↳ QTRS
↳ RRRPoloQTRSProof
↳ QTRS
↳ RisEmptyProof