We consider the following Problem:
Strict Trs:
{ a__fst(0(), Z) -> nil()
, a__fst(s(X), cons(Y, Z)) -> cons(mark(Y), fst(X, Z))
, a__from(X) -> cons(mark(X), from(s(X)))
, a__add(0(), X) -> mark(X)
, a__add(s(X), Y) -> s(add(X, Y))
, a__len(nil()) -> 0()
, a__len(cons(X, Z)) -> s(len(Z))
, mark(fst(X1, X2)) -> a__fst(mark(X1), mark(X2))
, mark(from(X)) -> a__from(mark(X))
, mark(add(X1, X2)) -> a__add(mark(X1), mark(X2))
, mark(len(X)) -> a__len(mark(X))
, mark(0()) -> 0()
, mark(s(X)) -> s(X)
, mark(nil()) -> nil()
, mark(cons(X1, X2)) -> cons(mark(X1), X2)
, a__fst(X1, X2) -> fst(X1, X2)
, a__from(X) -> from(X)
, a__add(X1, X2) -> add(X1, X2)
, a__len(X) -> len(X)}
StartTerms: basic terms
Strategy: innermost
Certificate: YES(?,O(n^2))
Proof:
We consider the following Problem:
Strict Trs:
{ a__fst(0(), Z) -> nil()
, a__fst(s(X), cons(Y, Z)) -> cons(mark(Y), fst(X, Z))
, a__from(X) -> cons(mark(X), from(s(X)))
, a__add(0(), X) -> mark(X)
, a__add(s(X), Y) -> s(add(X, Y))
, a__len(nil()) -> 0()
, a__len(cons(X, Z)) -> s(len(Z))
, mark(fst(X1, X2)) -> a__fst(mark(X1), mark(X2))
, mark(from(X)) -> a__from(mark(X))
, mark(add(X1, X2)) -> a__add(mark(X1), mark(X2))
, mark(len(X)) -> a__len(mark(X))
, mark(0()) -> 0()
, mark(s(X)) -> s(X)
, mark(nil()) -> nil()
, mark(cons(X1, X2)) -> cons(mark(X1), X2)
, a__fst(X1, X2) -> fst(X1, X2)
, a__from(X) -> from(X)
, a__add(X1, X2) -> add(X1, X2)
, a__len(X) -> len(X)}
StartTerms: basic terms
Strategy: innermost
Certificate: YES(?,O(n^2))
Proof:
The weightgap principle applies, where following rules are oriented strictly:
TRS Component:
{ a__fst(0(), Z) -> nil()
, a__fst(s(X), cons(Y, Z)) -> cons(mark(Y), fst(X, Z))
, a__from(X) -> cons(mark(X), from(s(X)))
, a__add(0(), X) -> mark(X)
, a__add(s(X), Y) -> s(add(X, Y))
, a__len(nil()) -> 0()
, a__len(cons(X, Z)) -> s(len(Z))
, a__fst(X1, X2) -> fst(X1, X2)
, a__from(X) -> from(X)
, a__add(X1, X2) -> add(X1, X2)
, a__len(X) -> len(X)}
Interpretation of nonconstant growth:
-------------------------------------
The following argument positions are usable:
Uargs(a__fst) = {1, 2}, Uargs(s) = {}, Uargs(cons) = {1},
Uargs(mark) = {}, Uargs(fst) = {}, Uargs(a__from) = {1},
Uargs(from) = {}, Uargs(a__add) = {1, 2}, Uargs(add) = {},
Uargs(a__len) = {1}, Uargs(len) = {}
We have the following EDA-non-satisfying and IDA(1)-non-satisfying matrix interpretation:
Interpretation Functions:
a__fst(x1, x2) = [1 0] x1 + [1 0] x2 + [1]
[0 0] [0 0] [1]
0() = [0]
[0]
nil() = [0]
[0]
s(x1) = [0 0] x1 + [0]
[0 0] [1]
cons(x1, x2) = [1 0] x1 + [0 0] x2 + [0]
[0 0] [0 0] [1]
mark(x1) = [0 0] x1 + [0]
[0 0] [1]
fst(x1, x2) = [0 0] x1 + [0 0] x2 + [0]
[0 0] [0 0] [0]
a__from(x1) = [1 0] x1 + [1]
[0 0] [1]
from(x1) = [0 0] x1 + [0]
[0 0] [0]
a__add(x1, x2) = [1 0] x1 + [1 0] x2 + [1]
[0 0] [0 0] [1]
add(x1, x2) = [0 0] x1 + [0 0] x2 + [0]
[0 0] [0 0] [0]
a__len(x1) = [1 0] x1 + [1]
[0 0] [1]
len(x1) = [0 0] x1 + [0]
[0 0] [0]
The strictly oriented rules are moved into the weak component.
We consider the following Problem:
Strict Trs:
{ mark(fst(X1, X2)) -> a__fst(mark(X1), mark(X2))
, mark(from(X)) -> a__from(mark(X))
, mark(add(X1, X2)) -> a__add(mark(X1), mark(X2))
, mark(le