(0) Obligation:
The Runtime Complexity (innermost) of the given
CpxTRS could be proven to be
BOUNDS(1, n^1).
The TRS R consists of the following rules:
a__eq(0, 0) → true
a__eq(s(X), s(Y)) → a__eq(X, Y)
a__eq(X, Y) → false
a__inf(X) → cons(X, inf(s(X)))
a__take(0, X) → nil
a__take(s(X), cons(Y, L)) → cons(Y, take(X, L))
a__length(nil) → 0
a__length(cons(X, L)) → s(length(L))
mark(eq(X1, X2)) → a__eq(X1, X2)
mark(inf(X)) → a__inf(mark(X))
mark(take(X1, X2)) → a__take(mark(X1), mark(X2))
mark(length(X)) → a__length(mark(X))
mark(0) → 0
mark(true) → true
mark(s(X)) → s(X)
mark(false) → false
mark(cons(X1, X2)) → cons(X1, X2)
mark(nil) → nil
a__eq(X1, X2) → eq(X1, X2)
a__inf(X) → inf(X)
a__take(X1, X2) → take(X1, X2)
a__length(X) → length(X)
Rewrite Strategy: INNERMOST
(1) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID) transformation)
Converted Cpx (relative) TRS to CDT
(2) Obligation:
Complexity Dependency Tuples Problem
Rules:
a__eq(0, 0) → true
a__eq(s(z0), s(z1)) → a__eq(z0, z1)
a__eq(z0, z1) → false
a__eq(z0, z1) → eq(z0, z1)
a__inf(z0) → cons(z0, inf(s(z0)))
a__inf(z0) → inf(z0)
a__take(0, z0) → nil
a__take(s(z0), cons(z1, z2)) → cons(z1, take(z0, z2))
a__take(z0, z1) → take(z0, z1)
a__length(nil) → 0
a__length(cons(z0, z1)) → s(length(z1))
a__length(z0) → length(z0)
mark(eq(z0, z1)) → a__eq(z0, z1)
mark(inf(z0)) → a__inf(mark(z0))
mark(take(z0, z1)) → a__take(mark(z0), mark(z1))
mark(length(z0)) → a__length(mark(z0))
mark(0) → 0
mark(true) → true
mark(s(z0)) → s(z0)
mark(false) → false
mark(cons(z0, z1)) → cons(z0, z1)
mark(nil) → nil
Tuples:
A__EQ(0, 0) → c
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
A__EQ(z0, z1) → c2
A__EQ(z0, z1) → c3
A__INF(z0) → c4
A__INF(z0) → c5
A__TAKE(0, z0) → c6
A__TAKE(s(z0), cons(z1, z2)) → c7
A__TAKE(z0, z1) → c8
A__LENGTH(nil) → c9
A__LENGTH(cons(z0, z1)) → c10
A__LENGTH(z0) → c11
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(A__INF(mark(z0)), MARK(z0))
MARK(take(z0, z1)) → c14(A__TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(length(z0)) → c15(A__LENGTH(mark(z0)), MARK(z0))
MARK(0) → c16
MARK(true) → c17
MARK(s(z0)) → c18
MARK(false) → c19
MARK(cons(z0, z1)) → c20
MARK(nil) → c21
S tuples:
A__EQ(0, 0) → c
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
A__EQ(z0, z1) → c2
A__EQ(z0, z1) → c3
A__INF(z0) → c4
A__INF(z0) → c5
A__TAKE(0, z0) → c6
A__TAKE(s(z0), cons(z1, z2)) → c7
A__TAKE(z0, z1) → c8
A__LENGTH(nil) → c9
A__LENGTH(cons(z0, z1)) → c10
A__LENGTH(z0) → c11
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(A__INF(mark(z0)), MARK(z0))
MARK(take(z0, z1)) → c14(A__TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(length(z0)) → c15(A__LENGTH(mark(z0)), MARK(z0))
MARK(0) → c16
MARK(true) → c17
MARK(s(z0)) → c18
MARK(false) → c19
MARK(cons(z0, z1)) → c20
MARK(nil) → c21
K tuples:none
Defined Rule Symbols:
a__eq, a__inf, a__take, a__length, mark
Defined Pair Symbols:
A__EQ, A__INF, A__TAKE, A__LENGTH, MARK
Compound Symbols:
c, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21
(3) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID) transformation)
Removed 17 trailing nodes:
A__TAKE(z0, z1) → c8
A__TAKE(s(z0), cons(z1, z2)) → c7
MARK(0) → c16
A__EQ(z0, z1) → c2
MARK(s(z0)) → c18
A__INF(z0) → c4
MARK(false) → c19
A__LENGTH(nil) → c9
A__EQ(z0, z1) → c3
MARK(nil) → c21
MARK(cons(z0, z1)) → c20
MARK(true) → c17
A__LENGTH(z0) → c11
A__LENGTH(cons(z0, z1)) → c10
A__TAKE(0, z0) → c6
A__INF(z0) → c5
A__EQ(0, 0) → c
(4) Obligation:
Complexity Dependency Tuples Problem
Rules:
a__eq(0, 0) → true
a__eq(s(z0), s(z1)) → a__eq(z0, z1)
a__eq(z0, z1) → false
a__eq(z0, z1) → eq(z0, z1)
a__inf(z0) → cons(z0, inf(s(z0)))
a__inf(z0) → inf(z0)
a__take(0, z0) → nil
a__take(s(z0), cons(z1, z2)) → cons(z1, take(z0, z2))
a__take(z0, z1) → take(z0, z1)
a__length(nil) → 0
a__length(cons(z0, z1)) → s(length(z1))
a__length(z0) → length(z0)
mark(eq(z0, z1)) → a__eq(z0, z1)
mark(inf(z0)) → a__inf(mark(z0))
mark(take(z0, z1)) → a__take(mark(z0), mark(z1))
mark(length(z0)) → a__length(mark(z0))
mark(0) → 0
mark(true) → true
mark(s(z0)) → s(z0)
mark(false) → false
mark(cons(z0, z1)) → cons(z0, z1)
mark(nil) → nil
Tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(A__INF(mark(z0)), MARK(z0))
MARK(take(z0, z1)) → c14(A__TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(length(z0)) → c15(A__LENGTH(mark(z0)), MARK(z0))
S tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(A__INF(mark(z0)), MARK(z0))
MARK(take(z0, z1)) → c14(A__TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(length(z0)) → c15(A__LENGTH(mark(z0)), MARK(z0))
K tuples:none
Defined Rule Symbols:
a__eq, a__inf, a__take, a__length, mark
Defined Pair Symbols:
A__EQ, MARK
Compound Symbols:
c1, c12, c13, c14, c15
(5) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID) transformation)
Removed 3 trailing tuple parts
(6) Obligation:
Complexity Dependency Tuples Problem
Rules:
a__eq(0, 0) → true
a__eq(s(z0), s(z1)) → a__eq(z0, z1)
a__eq(z0, z1) → false
a__eq(z0, z1) → eq(z0, z1)
a__inf(z0) → cons(z0, inf(s(z0)))
a__inf(z0) → inf(z0)
a__take(0, z0) → nil
a__take(s(z0), cons(z1, z2)) → cons(z1, take(z0, z2))
a__take(z0, z1) → take(z0, z1)
a__length(nil) → 0
a__length(cons(z0, z1)) → s(length(z1))
a__length(z0) → length(z0)
mark(eq(z0, z1)) → a__eq(z0, z1)
mark(inf(z0)) → a__inf(mark(z0))
mark(take(z0, z1)) → a__take(mark(z0), mark(z1))
mark(length(z0)) → a__length(mark(z0))
mark(0) → 0
mark(true) → true
mark(s(z0)) → s(z0)
mark(false) → false
mark(cons(z0, z1)) → cons(z0, z1)
mark(nil) → nil
Tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
S tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
K tuples:none
Defined Rule Symbols:
a__eq, a__inf, a__take, a__length, mark
Defined Pair Symbols:
A__EQ, MARK
Compound Symbols:
c1, c12, c13, c14, c15
(7) CdtUsableRulesProof (EQUIVALENT transformation)
The following rules are not usable and were removed:
a__eq(0, 0) → true
a__eq(s(z0), s(z1)) → a__eq(z0, z1)
a__eq(z0, z1) → false
a__eq(z0, z1) → eq(z0, z1)
a__inf(z0) → cons(z0, inf(s(z0)))
a__inf(z0) → inf(z0)
a__take(0, z0) → nil
a__take(s(z0), cons(z1, z2)) → cons(z1, take(z0, z2))
a__take(z0, z1) → take(z0, z1)
a__length(nil) → 0
a__length(cons(z0, z1)) → s(length(z1))
a__length(z0) → length(z0)
mark(eq(z0, z1)) → a__eq(z0, z1)
mark(inf(z0)) → a__inf(mark(z0))
mark(take(z0, z1)) → a__take(mark(z0), mark(z1))
mark(length(z0)) → a__length(mark(z0))
mark(0) → 0
mark(true) → true
mark(s(z0)) → s(z0)
mark(false) → false
mark(cons(z0, z1)) → cons(z0, z1)
mark(nil) → nil
(8) Obligation:
Complexity Dependency Tuples Problem
Rules:none
Tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
S tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
K tuples:none
Defined Rule Symbols:none
Defined Pair Symbols:
A__EQ, MARK
Compound Symbols:
c1, c12, c13, c14, c15
(9) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1)) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
We considered the (Usable) Rules:none
And the Tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(A__EQ(x1, x2)) = x2
POL(MARK(x1)) = x1
POL(c1(x1)) = x1
POL(c12(x1)) = x1
POL(c13(x1)) = x1
POL(c14(x1, x2)) = x1 + x2
POL(c15(x1)) = x1
POL(eq(x1, x2)) = x1 + x2
POL(inf(x1)) = [1] + x1
POL(length(x1)) = [1] + x1
POL(s(x1)) = x1
POL(take(x1, x2)) = [1] + x1 + x2
(10) Obligation:
Complexity Dependency Tuples Problem
Rules:none
Tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
S tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
K tuples:
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
Defined Rule Symbols:none
Defined Pair Symbols:
A__EQ, MARK
Compound Symbols:
c1, c12, c13, c14, c15
(11) CdtKnowledgeProof (BOTH BOUNDS(ID, ID) transformation)
The following tuples could be moved from S to K by knowledge propagation:
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
(12) Obligation:
Complexity Dependency Tuples Problem
Rules:none
Tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
S tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
K tuples:
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
Defined Rule Symbols:none
Defined Pair Symbols:
A__EQ, MARK
Compound Symbols:
c1, c12, c13, c14, c15
(13) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1)) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(A__EQ(x1, x2)) = x2
POL(MARK(x1)) = x1
POL(c1(x1)) = x1
POL(c12(x1)) = x1
POL(c13(x1)) = x1
POL(c14(x1, x2)) = x1 + x2
POL(c15(x1)) = x1
POL(eq(x1, x2)) = [1] + x1 + x2
POL(inf(x1)) = x1
POL(length(x1)) = x1
POL(s(x1)) = [1] + x1
POL(take(x1, x2)) = [1] + x1 + x2
(14) Obligation:
Complexity Dependency Tuples Problem
Rules:none
Tuples:
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
S tuples:none
K tuples:
MARK(inf(z0)) → c13(MARK(z0))
MARK(take(z0, z1)) → c14(MARK(z0), MARK(z1))
MARK(length(z0)) → c15(MARK(z0))
MARK(eq(z0, z1)) → c12(A__EQ(z0, z1))
A__EQ(s(z0), s(z1)) → c1(A__EQ(z0, z1))
Defined Rule Symbols:none
Defined Pair Symbols:
A__EQ, MARK
Compound Symbols:
c1, c12, c13, c14, c15
(15) SIsEmptyProof (BOTH BOUNDS(ID, ID) transformation)
The set S is empty
(16) BOUNDS(1, 1)