0 QTRS
↳1 DependencyPairsProof (⇔)
↳2 QDP
↳3 DependencyGraphProof (⇔)
↳4 AND
↳5 QDP
↳6 QDPOrderProof (⇔)
↳7 QDP
↳8 QDPOrderProof (⇔)
↳9 QDP
↳10 PisEmptyProof (⇔)
↳11 TRUE
↳12 QDP
↳13 QDPOrderProof (⇔)
↳14 QDP
↳15 QDPOrderProof (⇔)
↳16 QDP
↳17 QDPOrderProof (⇔)
↳18 QDP
↳19 QDPOrderProof (⇔)
↳20 QDP
↳21 PisEmptyProof (⇔)
↳22 TRUE
↳23 QDP
↳24 QDPOrderProof (⇔)
↳25 QDP
↳26 QDPOrderProof (⇔)
↳27 QDP
↳28 PisEmptyProof (⇔)
↳29 TRUE
↳30 QDP
↳31 QDPOrderProof (⇔)
↳32 QDP
↳33 QDPOrderProof (⇔)
↳34 QDP
↳35 QDPOrderProof (⇔)
↳36 QDP
↳37 PisEmptyProof (⇔)
↳38 TRUE
↳39 QDP
↳40 QDPOrderProof (⇔)
↳41 QDP
↳42 QDPOrderProof (⇔)
↳43 QDP
↳44 PisEmptyProof (⇔)
↳45 TRUE
↳46 QDP
↳47 QDPOrderProof (⇔)
↳48 QDP
↳49 QDPOrderProof (⇔)
↳50 QDP
↳51 QDPOrderProof (⇔)
↳52 QDP
↳53 PisEmptyProof (⇔)
↳54 TRUE
↳55 QDP
↳56 QDPOrderProof (⇔)
↳57 QDP
↳58 QDPOrderProof (⇔)
↳59 QDP
↳60 QDPOrderProof (⇔)
↳61 QDP
↳62 QDPOrderProof (⇔)
↳63 QDP
↳64 DependencyGraphProof (⇔)
↳65 QDP
↳66 QDPOrderProof (⇔)
↳67 QDP
↳68 PisEmptyProof (⇔)
↳69 TRUE
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
ACTIVE(fst(0, Z)) → MARK(nil)
ACTIVE(fst(s(X), cons(Y, Z))) → MARK(cons(Y, fst(X, Z)))
ACTIVE(fst(s(X), cons(Y, Z))) → CONS(Y, fst(X, Z))
ACTIVE(fst(s(X), cons(Y, Z))) → FST(X, Z)
ACTIVE(from(X)) → MARK(cons(X, from(s(X))))
ACTIVE(from(X)) → CONS(X, from(s(X)))
ACTIVE(from(X)) → FROM(s(X))
ACTIVE(from(X)) → S(X)
ACTIVE(add(0, X)) → MARK(X)
ACTIVE(add(s(X), Y)) → MARK(s(add(X, Y)))
ACTIVE(add(s(X), Y)) → S(add(X, Y))
ACTIVE(add(s(X), Y)) → ADD(X, Y)
ACTIVE(len(nil)) → MARK(0)
ACTIVE(len(cons(X, Z))) → MARK(s(len(Z)))
ACTIVE(len(cons(X, Z))) → S(len(Z))
ACTIVE(len(cons(X, Z))) → LEN(Z)
MARK(fst(X1, X2)) → ACTIVE(fst(mark(X1), mark(X2)))
MARK(fst(X1, X2)) → FST(mark(X1), mark(X2))
MARK(fst(X1, X2)) → MARK(X1)
MARK(fst(X1, X2)) → MARK(X2)
MARK(0) → ACTIVE(0)
MARK(nil) → ACTIVE(nil)
MARK(s(X)) → ACTIVE(s(X))
MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
MARK(cons(X1, X2)) → CONS(mark(X1), X2)
MARK(cons(X1, X2)) → MARK(X1)
MARK(from(X)) → ACTIVE(from(mark(X)))
MARK(from(X)) → FROM(mark(X))
MARK(from(X)) → MARK(X)
MARK(add(X1, X2)) → ACTIVE(add(mark(X1), mark(X2)))
MARK(add(X1, X2)) → ADD(mark(X1), mark(X2))
MARK(add(X1, X2)) → MARK(X1)
MARK(add(X1, X2)) → MARK(X2)
MARK(len(X)) → ACTIVE(len(mark(X)))
MARK(len(X)) → LEN(mark(X))
MARK(len(X)) → MARK(X)
FST(mark(X1), X2) → FST(X1, X2)
FST(X1, mark(X2)) → FST(X1, X2)
FST(active(X1), X2) → FST(X1, X2)
FST(X1, active(X2)) → FST(X1, X2)
S(mark(X)) → S(X)
S(active(X)) → S(X)
CONS(mark(X1), X2) → CONS(X1, X2)
CONS(X1, mark(X2)) → CONS(X1, X2)
CONS(active(X1), X2) → CONS(X1, X2)
CONS(X1, active(X2)) → CONS(X1, X2)
FROM(mark(X)) → FROM(X)
FROM(active(X)) → FROM(X)
ADD(mark(X1), X2) → ADD(X1, X2)
ADD(X1, mark(X2)) → ADD(X1, X2)
ADD(active(X1), X2) → ADD(X1, X2)
ADD(X1, active(X2)) → ADD(X1, X2)
LEN(mark(X)) → LEN(X)
LEN(active(X)) → LEN(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
LEN(active(X)) → LEN(X)
LEN(mark(X)) → LEN(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
LEN(mark(X)) → LEN(X)
from > [mark1, fst2, cons, add1, len1] > LEN1 > [0, nil, s]
LEN1: multiset
mark1: [1]
fst2: [2,1]
0: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add1: [1]
len1: [1]
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
LEN(active(X)) → LEN(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
LEN(active(X)) → LEN(X)
from > [fst2, 0, mark1, add2] > nil > active1 > cons
from > [fst2, 0, mark1, add2] > s > active1 > cons
len > [fst2, 0, mark1, add2] > nil > active1 > cons
len > [fst2, 0, mark1, add2] > s > active1 > cons
LEN1: [1]
active1: [1]
fst2: multiset
0: multiset
mark1: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add2: multiset
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
ADD(X1, mark(X2)) → ADD(X1, X2)
ADD(mark(X1), X2) → ADD(X1, X2)
ADD(active(X1), X2) → ADD(X1, X2)
ADD(X1, active(X2)) → ADD(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
ADD(mark(X1), X2) → ADD(X1, X2)
[mark1, fst1, from1, add1, len1] > [0, nil, s]
mark1: [1]
fst1: [1]
0: multiset
nil: multiset
s: []
from1: [1]
add1: [1]
len1: [1]
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
ADD(X1, mark(X2)) → ADD(X1, X2)
ADD(active(X1), X2) → ADD(X1, X2)
ADD(X1, active(X2)) → ADD(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
ADD(X1, mark(X2)) → ADD(X1, X2)
fst > [0, nil] > [ADD2, mark1, from1, add1] > [s, cons]
len > [0, nil] > [ADD2, mark1, from1, add1] > [s, cons]
ADD2: multiset
mark1: [1]
fst: multiset
0: multiset
nil: multiset
s: multiset
cons: multiset
from1: [1]
add1: [1]
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
ADD(active(X1), X2) → ADD(X1, X2)
ADD(X1, active(X2)) → ADD(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
ADD(active(X1), X2) → ADD(X1, X2)
fst > nil > 0 > [mark1, add2] > [active1, s, len1]
fst > cons > [mark1, add2] > [active1, s, len1]
from > cons > [mark1, add2] > [active1, s, len1]
ADD1: [1]
active1: [1]
fst: []
0: multiset
mark1: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add2: multiset
len1: [1]
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
ADD(X1, active(X2)) → ADD(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
ADD(X1, active(X2)) → ADD(X1, X2)
from > [fst2, mark1, add2] > nil > active1
from > [fst2, mark1, add2] > s > cons > active1
len > 0 > [fst2, mark1, add2] > nil > active1
len > 0 > [fst2, mark1, add2] > s > cons > active1
active1: [1]
fst2: multiset
0: multiset
mark1: multiset
nil: multiset
s: multiset
cons: []
from: []
add2: multiset
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
FROM(active(X)) → FROM(X)
FROM(mark(X)) → FROM(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
FROM(mark(X)) → FROM(X)
from > [mark1, fst2, cons, add1, len1] > FROM1 > [0, nil, s]
FROM1: multiset
mark1: [1]
fst2: [2,1]
0: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add1: [1]
len1: [1]
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
FROM(active(X)) → FROM(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
FROM(active(X)) → FROM(X)
from > [fst2, 0, mark1, add2] > nil > active1 > cons
from > [fst2, 0, mark1, add2] > s > active1 > cons
len > [fst2, 0, mark1, add2] > nil > active1 > cons
len > [fst2, 0, mark1, add2] > s > active1 > cons
FROM1: [1]
active1: [1]
fst2: multiset
0: multiset
mark1: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add2: multiset
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
CONS(X1, mark(X2)) → CONS(X1, X2)
CONS(mark(X1), X2) → CONS(X1, X2)
CONS(active(X1), X2) → CONS(X1, X2)
CONS(X1, active(X2)) → CONS(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
CONS(mark(X1), X2) → CONS(X1, X2)
CONS1 > [s, cons]
len > [mark1, fst1, 0, nil, from1, add1] > [s, cons]
CONS1: multiset
mark1: [1]
fst1: [1]
0: multiset
nil: multiset
s: []
cons: []
from1: [1]
add1: [1]
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
CONS(X1, mark(X2)) → CONS(X1, X2)
CONS(active(X1), X2) → CONS(X1, X2)
CONS(X1, active(X2)) → CONS(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
CONS(X1, mark(X2)) → CONS(X1, X2)
fst > nil > [mark1, 0, add2] > CONS2 > s
fst > nil > [mark1, 0, add2] > cons > s
from > [mark1, 0, add2] > CONS2 > s
from > [mark1, 0, add2] > cons > s
len > [mark1, 0, add2] > CONS2 > s
len > [mark1, 0, add2] > cons > s
CONS2: [1,2]
mark1: [1]
fst: []
0: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add2: [2,1]
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
CONS(active(X1), X2) → CONS(X1, X2)
CONS(X1, active(X2)) → CONS(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
CONS(active(X1), X2) → CONS(X1, X2)
CONS(X1, active(X2)) → CONS(X1, X2)
from > cons > [fst2, mark1, nil, add2] > active1 > [CONS2, s]
len > 0 > [fst2, mark1, nil, add2] > active1 > [CONS2, s]
CONS2: multiset
active1: multiset
fst2: [2,1]
0: multiset
mark1: [1]
nil: multiset
s: multiset
cons: []
from: []
add2: [2,1]
len: multiset
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
S(active(X)) → S(X)
S(mark(X)) → S(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
S(mark(X)) → S(X)
from > [mark1, fst2, cons, add1, len1] > S1 > [0, nil, s]
S1: multiset
mark1: [1]
fst2: [2,1]
0: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add1: [1]
len1: [1]
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
S(active(X)) → S(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
S(active(X)) → S(X)
from > [fst2, 0, mark1, add2] > nil > active1 > cons
from > [fst2, 0, mark1, add2] > s > active1 > cons
len > [fst2, 0, mark1, add2] > nil > active1 > cons
len > [fst2, 0, mark1, add2] > s > active1 > cons
S1: [1]
active1: [1]
fst2: multiset
0: multiset
mark1: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add2: multiset
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
FST(X1, mark(X2)) → FST(X1, X2)
FST(mark(X1), X2) → FST(X1, X2)
FST(active(X1), X2) → FST(X1, X2)
FST(X1, active(X2)) → FST(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
FST(mark(X1), X2) → FST(X1, X2)
FST1 > [s, cons]
len > [mark1, fst1, 0, nil, from1, add1] > [s, cons]
FST1: multiset
mark1: [1]
fst1: [1]
0: multiset
nil: multiset
s: []
cons: []
from1: [1]
add1: [1]
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
FST(X1, mark(X2)) → FST(X1, X2)
FST(active(X1), X2) → FST(X1, X2)
FST(X1, active(X2)) → FST(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
FST(X1, mark(X2)) → FST(X1, X2)
fst > nil > [mark1, 0, add2] > FST2 > s
fst > nil > [mark1, 0, add2] > cons > s
from > [mark1, 0, add2] > FST2 > s
from > [mark1, 0, add2] > cons > s
len > [mark1, 0, add2] > FST2 > s
len > [mark1, 0, add2] > cons > s
FST2: [1,2]
mark1: [1]
fst: []
0: multiset
nil: multiset
s: multiset
cons: multiset
from: []
add2: [2,1]
len: []
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
FST(active(X1), X2) → FST(X1, X2)
FST(X1, active(X2)) → FST(X1, X2)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
FST(active(X1), X2) → FST(X1, X2)
FST(X1, active(X2)) → FST(X1, X2)
from > cons > [fst2, mark1, nil, add2] > active1 > [FST2, s]
len > 0 > [fst2, mark1, nil, add2] > active1 > [FST2, s]
FST2: multiset
active1: multiset
fst2: [2,1]
0: multiset
mark1: [1]
nil: multiset
s: multiset
cons: []
from: []
add2: [2,1]
len: multiset
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
ACTIVE(fst(s(X), cons(Y, Z))) → MARK(cons(Y, fst(X, Z)))
MARK(fst(X1, X2)) → ACTIVE(fst(mark(X1), mark(X2)))
ACTIVE(from(X)) → MARK(cons(X, from(s(X))))
MARK(fst(X1, X2)) → MARK(X1)
MARK(fst(X1, X2)) → MARK(X2)
MARK(s(X)) → ACTIVE(s(X))
ACTIVE(add(0, X)) → MARK(X)
MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
ACTIVE(add(s(X), Y)) → MARK(s(add(X, Y)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(from(X)) → ACTIVE(from(mark(X)))
ACTIVE(len(cons(X, Z))) → MARK(s(len(Z)))
MARK(from(X)) → MARK(X)
MARK(add(X1, X2)) → ACTIVE(add(mark(X1), mark(X2)))
MARK(add(X1, X2)) → MARK(X1)
MARK(add(X1, X2)) → MARK(X2)
MARK(len(X)) → ACTIVE(len(mark(X)))
MARK(len(X)) → MARK(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
ACTIVE(fst(s(X), cons(Y, Z))) → MARK(cons(Y, fst(X, Z)))
ACTIVE(from(X)) → MARK(cons(X, from(s(X))))
MARK(fst(X1, X2)) → MARK(X1)
MARK(fst(X1, X2)) → MARK(X2)
ACTIVE(add(0, X)) → MARK(X)
ACTIVE(add(s(X), Y)) → MARK(s(add(X, Y)))
MARK(from(X)) → MARK(X)
MARK(add(X1, X2)) → MARK(X1)
MARK(add(X1, X2)) → MARK(X2)
fst2 > [0, nil] > s
from1 > s
add2 > s
fst2: multiset
s: multiset
from1: multiset
add2: [1,2]
0: multiset
nil: multiset
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
MARK(fst(X1, X2)) → ACTIVE(fst(mark(X1), mark(X2)))
MARK(s(X)) → ACTIVE(s(X))
MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
MARK(cons(X1, X2)) → MARK(X1)
MARK(from(X)) → ACTIVE(from(mark(X)))
ACTIVE(len(cons(X, Z))) → MARK(s(len(Z)))
MARK(add(X1, X2)) → ACTIVE(add(mark(X1), mark(X2)))
MARK(len(X)) → ACTIVE(len(mark(X)))
MARK(len(X)) → MARK(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
MARK(fst(X1, X2)) → ACTIVE(fst(mark(X1), mark(X2)))
MARK(from(X)) → ACTIVE(from(mark(X)))
MARK(add(X1, X2)) → ACTIVE(add(mark(X1), mark(X2)))
MARK(len(X)) → ACTIVE(len(mark(X)))
MARK(len(X)) → MARK(X)
[fst1, mark1, from1, len1, add2] > [ACTIVE, s, 0, nil]
fst1: [1]
ACTIVE: []
mark1: [1]
s: []
from1: [1]
len1: [1]
add2: [2,1]
0: multiset
nil: multiset
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
MARK(s(X)) → ACTIVE(s(X))
MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
MARK(cons(X1, X2)) → MARK(X1)
ACTIVE(len(cons(X, Z))) → MARK(s(len(Z)))
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
[fst, nil] > 0 > cons
from > [MARK, s, len] > 0 > cons
add2 > [MARK, s, len] > 0 > cons
MARK: []
s: []
cons: multiset
len: []
fst: multiset
0: multiset
nil: multiset
from: []
add2: multiset
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
MARK(s(X)) → ACTIVE(s(X))
MARK(cons(X1, X2)) → MARK(X1)
ACTIVE(len(cons(X, Z))) → MARK(s(len(Z)))
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
MARK(s(X)) → ACTIVE(s(X))
[MARK, len] > [s, 0, nil]
MARK: []
s: []
len: []
0: multiset
nil: multiset
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
MARK(cons(X1, X2)) → MARK(X1)
ACTIVE(len(cons(X, Z))) → MARK(s(len(Z)))
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
MARK(cons(X1, X2)) → MARK(X1)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
MARK(cons(X1, X2)) → MARK(X1)
[MARK1, cons1, from1] > [s, add1] > [0, nil]
MARK1: multiset
cons1: multiset
0: multiset
nil: multiset
s: multiset
from1: multiset
add1: multiset
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)
active(fst(0, Z)) → mark(nil)
active(fst(s(X), cons(Y, Z))) → mark(cons(Y, fst(X, Z)))
active(from(X)) → mark(cons(X, from(s(X))))
active(add(0, X)) → mark(X)
active(add(s(X), Y)) → mark(s(add(X, Y)))
active(len(nil)) → mark(0)
active(len(cons(X, Z))) → mark(s(len(Z)))
mark(fst(X1, X2)) → active(fst(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(s(X)) → active(s(X))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(from(X)) → active(from(mark(X)))
mark(add(X1, X2)) → active(add(mark(X1), mark(X2)))
mark(len(X)) → active(len(mark(X)))
fst(mark(X1), X2) → fst(X1, X2)
fst(X1, mark(X2)) → fst(X1, X2)
fst(active(X1), X2) → fst(X1, X2)
fst(X1, active(X2)) → fst(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
from(mark(X)) → from(X)
from(active(X)) → from(X)
add(mark(X1), X2) → add(X1, X2)
add(X1, mark(X2)) → add(X1, X2)
add(active(X1), X2) → add(X1, X2)
add(X1, active(X2)) → add(X1, X2)
len(mark(X)) → len(X)
len(active(X)) → len(X)