(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:

circ(cons(a, s), t) → cons(msubst(a, t), circ(s, t))
circ(cons(lift, s), cons(a, t)) → cons(a, circ(s, t))
circ(cons(lift, s), cons(lift, t)) → cons(lift, circ(s, t))
circ(circ(s, t), u) → circ(s, circ(t, u))
circ(s, id) → s
circ(id, s) → s
circ(cons(lift, s), circ(cons(lift, t), u)) → circ(cons(lift, circ(s, t)), u)
subst(a, id) → a
msubst(a, id) → a
msubst(msubst(a, s), t) → msubst(a, circ(s, t))

Rewrite Strategy: INNERMOST

(1) NestedDefinedSymbolProof (BOTH BOUNDS(ID, ID) transformation)

The TRS does not nest defined symbols.
Hence, the left-hand sides of the following rules are not basic-reachable and can be removed:
circ(circ(s, t), u) → circ(s, circ(t, u))
circ(cons(lift, s), circ(cons(lift, t), u)) → circ(cons(lift, circ(s, t)), u)
msubst(msubst(a, s), t) → msubst(a, circ(s, t))

(2) 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:

circ(s, id) → s
circ(id, s) → s
circ(cons(a, s), t) → cons(msubst(a, t), circ(s, t))
circ(cons(lift, s), cons(lift, t)) → cons(lift, circ(s, t))
subst(a, id) → a
msubst(a, id) → a
circ(cons(lift, s), cons(a, t)) → cons(a, circ(s, t))

Rewrite Strategy: INNERMOST

(3) TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID) transformation)

Transformed TRS to weighted TRS

(4) Obligation:

The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^1).


The TRS R consists of the following rules:

circ(s, id) → s [1]
circ(id, s) → s [1]
circ(cons(a, s), t) → cons(msubst(a, t), circ(s, t)) [1]
circ(cons(lift, s), cons(lift, t)) → cons(lift, circ(s, t)) [1]
subst(a, id) → a [1]
msubst(a, id) → a [1]
circ(cons(lift, s), cons(a, t)) → cons(a, circ(s, t)) [1]

Rewrite Strategy: INNERMOST

(5) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)

Infered types.

(6) Obligation:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

circ(s, id) → s [1]
circ(id, s) → s [1]
circ(cons(a, s), t) → cons(msubst(a, t), circ(s, t)) [1]
circ(cons(lift, s), cons(lift, t)) → cons(lift, circ(s, t)) [1]
subst(a, id) → a [1]
msubst(a, id) → a [1]
circ(cons(lift, s), cons(a, t)) → cons(a, circ(s, t)) [1]

The TRS has the following type information:
circ :: id:cons → id:cons → id:cons
id :: id:cons
cons :: lift → id:cons → id:cons
msubst :: lift → id:cons → lift
lift :: lift
subst :: subst → id:cons → subst

Rewrite Strategy: INNERMOST

(7) CompletionProof (UPPER BOUND(ID) transformation)

The transformation into a RNTS is sound, since:

(a) The obligation is a constructor system where every type has a constant constructor,

(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:


circ
subst
msubst

(c) The following functions are completely defined:
none

Due to the following rules being added:
none

And the following fresh constants:

const

(8) Obligation:

Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

circ(s, id) → s [1]
circ(id, s) → s [1]
circ(cons(a, s), t) → cons(msubst(a, t), circ(s, t)) [1]
circ(cons(lift, s), cons(lift, t)) → cons(lift, circ(s, t)) [1]
subst(a, id) → a [1]
msubst(a, id) → a [1]
circ(cons(lift, s), cons(a, t)) → cons(a, circ(s, t)) [1]

The TRS has the following type information:
circ :: id:cons → id:cons → id:cons
id :: id:cons
cons :: lift → id:cons → id:cons
msubst :: lift → id:cons → lift
lift :: lift
subst :: subst → id:cons → subst
const :: subst

Rewrite Strategy: INNERMOST

(9) NarrowingProof (BOTH BOUNDS(ID, ID) transformation)

Narrowed the inner basic terms of all right-hand sides by a single narrowing step.

(10) Obligation:

Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

circ(s, id) → s [1]
circ(id, s) → s [1]
circ(cons(a, s), t) → cons(msubst(a, t), circ(s, t)) [1]
circ(cons(lift, s), cons(lift, t)) → cons(lift, circ(s, t)) [1]
subst(a, id) → a [1]
msubst(a, id) → a [1]
circ(cons(lift, s), cons(a, t)) → cons(a, circ(s, t)) [1]

The TRS has the following type information:
circ :: id:cons → id:cons → id:cons
id :: id:cons
cons :: lift → id:cons → id:cons
msubst :: lift → id:cons → lift
lift :: lift
subst :: subst → id:cons → subst
const :: subst

Rewrite Strategy: INNERMOST

(11) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID) transformation)

Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction.
The constant constructors are abstracted as follows:

id => 0
lift => 0
const => 0

(12) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ s :|: z = s, s >= 0, z' = 0
circ(z, z') -{ 1 }→ s :|: s >= 0, z = 0, z' = s
circ(z, z') -{ 1 }→ 1 + a + circ(s, t) :|: z = 1 + 0 + s, a >= 0, z' = 1 + a + t, t >= 0, s >= 0
circ(z, z') -{ 1 }→ 1 + msubst(a, t) + circ(s, t) :|: z' = t, a >= 0, z = 1 + a + s, t >= 0, s >= 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(s, t) :|: z = 1 + 0 + s, z' = 1 + 0 + t, t >= 0, s >= 0
msubst(z, z') -{ 1 }→ a :|: z = a, a >= 0, z' = 0
subst(z, z') -{ 1 }→ a :|: z = a, a >= 0, z' = 0

(13) InliningProof (UPPER BOUND(ID) transformation)

Inlined the following terminating rules on right-hand sides where appropriate:

msubst(z, z') -{ 1 }→ a :|: z = a, a >= 0, z' = 0

(14) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ s :|: z = s, s >= 0, z' = 0
circ(z, z') -{ 1 }→ s :|: s >= 0, z = 0, z' = s
circ(z, z') -{ 1 }→ 1 + a + circ(s, t) :|: z = 1 + 0 + s, a >= 0, z' = 1 + a + t, t >= 0, s >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, t) :|: z' = t, a >= 0, z = 1 + a + s, t >= 0, s >= 0, a = a', a' >= 0, t = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(s, t) :|: z = 1 + 0 + s, z' = 1 + 0 + t, t >= 0, s >= 0
msubst(z, z') -{ 1 }→ a :|: z = a, a >= 0, z' = 0
subst(z, z') -{ 1 }→ a :|: z = a, a >= 0, z' = 0

(15) SimplificationProof (BOTH BOUNDS(ID, ID) transformation)

Simplified the RNTS by moving equalities from the constraints into the right-hand sides.

(16) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

(17) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID) transformation)

Found the following analysis order by SCC decomposition:

{ subst }
{ msubst }
{ circ }

(18) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed: {subst}, {msubst}, {circ}

(19) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: subst
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: z

(20) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed: {subst}, {msubst}, {circ}
Previous analysis results are:
subst: runtime: ?, size: O(n1) [z]

(21) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: subst
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(22) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed: {msubst}, {circ}
Previous analysis results are:
subst: runtime: O(1) [1], size: O(n1) [z]

(23) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(24) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed: {msubst}, {circ}
Previous analysis results are:
subst: runtime: O(1) [1], size: O(n1) [z]

(25) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: msubst
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: z

(26) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed: {msubst}, {circ}
Previous analysis results are:
subst: runtime: O(1) [1], size: O(n1) [z]
msubst: runtime: ?, size: O(n1) [z]

(27) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: msubst
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(28) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed: {circ}
Previous analysis results are:
subst: runtime: O(1) [1], size: O(n1) [z]
msubst: runtime: O(1) [1], size: O(n1) [z]

(29) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(30) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed: {circ}
Previous analysis results are:
subst: runtime: O(1) [1], size: O(n1) [z]
msubst: runtime: O(1) [1], size: O(n1) [z]

(31) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: circ
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: z + z'

(32) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed: {circ}
Previous analysis results are:
subst: runtime: O(1) [1], size: O(n1) [z]
msubst: runtime: O(1) [1], size: O(n1) [z]
circ: runtime: ?, size: O(n1) [z + z']

(33) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using PUBS for: circ
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + 2·z

(34) Obligation:

Complexity RNTS consisting of the following rules:

circ(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
circ(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
circ(z, z') -{ 1 }→ 1 + a + circ(z - 1, t) :|: a >= 0, z' = 1 + a + t, t >= 0, z - 1 >= 0
circ(z, z') -{ 2 }→ 1 + a' + circ(s, z') :|: a >= 0, z = 1 + a + s, z' >= 0, s >= 0, a = a', a' >= 0, z' = 0
circ(z, z') -{ 1 }→ 1 + 0 + circ(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0
msubst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
subst(z, z') -{ 1 }→ z :|: z >= 0, z' = 0

Function symbols to be analyzed:
Previous analysis results are:
subst: runtime: O(1) [1], size: O(n1) [z]
msubst: runtime: O(1) [1], size: O(n1) [z]
circ: runtime: O(n1) [1 + 2·z], size: O(n1) [z + z']

(35) FinalProof (EQUIVALENT transformation)

Computed overall runtime complexity

(36) BOUNDS(1, n^1)