0 CpxRelTRS
↳1 RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳4 CpxWeightedTrs
↳5 TypeInferenceProof (BOTH BOUNDS(ID, ID), 0 ms)
↳6 CpxTypedWeightedTrs
↳7 CompletionProof (UPPER BOUND(ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳10 CpxTypedWeightedCompleteTrs
↳11 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳12 CpxRNTS
↳13 InliningProof (UPPER BOUND(ID), 53 ms)
↳14 CpxRNTS
↳15 SimplificationProof (BOTH BOUNDS(ID, ID), 1 ms)
↳16 CpxRNTS
↳17 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳18 CpxRNTS
↳19 IntTrsBoundProof (UPPER BOUND(ID), 358 ms)
↳20 CpxRNTS
↳21 IntTrsBoundProof (UPPER BOUND(ID), 8 ms)
↳22 CpxRNTS
↳23 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳24 CpxRNTS
↳25 IntTrsBoundProof (UPPER BOUND(ID), 596 ms)
↳26 CpxRNTS
↳27 IntTrsBoundProof (UPPER BOUND(ID), 199 ms)
↳28 CpxRNTS
↳29 FinalProof (⇔, 0 ms)
↳30 BOUNDS(1, n^1)
add0(S(x), x2) → +(S(0), add0(x2, x))
add0(0, x2) → x2
+(x, S(0)) → S(x)
+(S(0), y) → S(y)
add0(S(x), x2) → +(S(0), add0(x2, x)) [1]
add0(0, x2) → x2 [1]
+(x, S(0)) → S(x) [0]
+(S(0), y) → S(y) [0]
+ => plus |
add0(S(x), x2) → plus(S(0), add0(x2, x)) [1]
add0(0, x2) → x2 [1]
plus(x, S(0)) → S(x) [0]
plus(S(0), y) → S(y) [0]
add0(S(x), x2) → plus(S(0), add0(x2, x)) [1]
add0(0, x2) → x2 [1]
plus(x, S(0)) → S(x) [0]
plus(S(0), y) → S(y) [0]
add0 :: S:0 → S:0 → S:0 S :: S:0 → S:0 plus :: S:0 → S:0 → S:0 0 :: S:0 |
(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:
none
(c) The following functions are completely defined:
add0
plus
plus(v0, v1) → 0 [0]
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
0 => 0
add0(z, z') -{ 1 }→ x2 :|: z' = x2, z = 0, x2 >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, x) :|: x >= 0, z = 1 + x, z' = 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(x, x'))) :|: z' = 1 + x', x >= 0, x' >= 0, z = 1 + x
plus(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
plus(z, z') -{ 0 }→ 1 + x :|: x >= 0, z' = 1 + 0, z = x
plus(z, z') -{ 0 }→ 1 + y :|: z = 1 + 0, y >= 0, z' = y
plus(z, z') -{ 0 }→ 1 + x :|: x >= 0, z' = 1 + 0, z = x
plus(z, z') -{ 0 }→ 1 + y :|: z = 1 + 0, y >= 0, z' = y
plus(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
add0(z, z') -{ 1 }→ x2 :|: z' = x2, z = 0, x2 >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(x, x'))) :|: z' = 1 + x', x >= 0, x' >= 0, z = 1 + x
add0(z, z') -{ 2 }→ 0 :|: x >= 0, z = 1 + x, z' = 0, v0 >= 0, v1 >= 0, 1 + 0 = v0, x = v1
add0(z, z') -{ 2 }→ 1 + x' :|: x >= 0, z = 1 + x, z' = 0, x' >= 0, x = 1 + 0, 1 + 0 = x'
add0(z, z') -{ 2 }→ 1 + y :|: x >= 0, z = 1 + x, z' = 0, 1 + 0 = 1 + 0, y >= 0, x = y
plus(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
plus(z, z') -{ 0 }→ 1 + x :|: x >= 0, z' = 1 + 0, z = x
plus(z, z') -{ 0 }→ 1 + y :|: z = 1 + 0, y >= 0, z' = y
add0(z, z') -{ 1 }→ z' :|: z = 0, z' >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(z - 1, z' - 1))) :|: z - 1 >= 0, z' - 1 >= 0
add0(z, z') -{ 2 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 + 0 = v0, z - 1 = v1
add0(z, z') -{ 2 }→ 1 + x' :|: z - 1 >= 0, z' = 0, x' >= 0, z - 1 = 1 + 0, 1 + 0 = x'
add0(z, z') -{ 2 }→ 1 + y :|: z - 1 >= 0, z' = 0, 1 + 0 = 1 + 0, y >= 0, z - 1 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
{ plus } { add0 } |
add0(z, z') -{ 1 }→ z' :|: z = 0, z' >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(z - 1, z' - 1))) :|: z - 1 >= 0, z' - 1 >= 0
add0(z, z') -{ 2 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 + 0 = v0, z - 1 = v1
add0(z, z') -{ 2 }→ 1 + x' :|: z - 1 >= 0, z' = 0, x' >= 0, z - 1 = 1 + 0, 1 + 0 = x'
add0(z, z') -{ 2 }→ 1 + y :|: z - 1 >= 0, z' = 0, 1 + 0 = 1 + 0, y >= 0, z - 1 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z = 0, z' >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(z - 1, z' - 1))) :|: z - 1 >= 0, z' - 1 >= 0
add0(z, z') -{ 2 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 + 0 = v0, z - 1 = v1
add0(z, z') -{ 2 }→ 1 + x' :|: z - 1 >= 0, z' = 0, x' >= 0, z - 1 = 1 + 0, 1 + 0 = x'
add0(z, z') -{ 2 }→ 1 + y :|: z - 1 >= 0, z' = 0, 1 + 0 = 1 + 0, y >= 0, z - 1 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: ?, size: O(n1) [z + z'] |
add0(z, z') -{ 1 }→ z' :|: z = 0, z' >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(z - 1, z' - 1))) :|: z - 1 >= 0, z' - 1 >= 0
add0(z, z') -{ 2 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 + 0 = v0, z - 1 = v1
add0(z, z') -{ 2 }→ 1 + x' :|: z - 1 >= 0, z' = 0, x' >= 0, z - 1 = 1 + 0, 1 + 0 = x'
add0(z, z') -{ 2 }→ 1 + y :|: z - 1 >= 0, z' = 0, 1 + 0 = 1 + 0, y >= 0, z - 1 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: O(1) [0], size: O(n1) [z + z'] |
add0(z, z') -{ 1 }→ z' :|: z = 0, z' >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(z - 1, z' - 1))) :|: z - 1 >= 0, z' - 1 >= 0
add0(z, z') -{ 2 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 + 0 = v0, z - 1 = v1
add0(z, z') -{ 2 }→ 1 + x' :|: z - 1 >= 0, z' = 0, x' >= 0, z - 1 = 1 + 0, 1 + 0 = x'
add0(z, z') -{ 2 }→ 1 + y :|: z - 1 >= 0, z' = 0, 1 + 0 = 1 + 0, y >= 0, z - 1 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: O(1) [0], size: O(n1) [z + z'] |
add0(z, z') -{ 1 }→ z' :|: z = 0, z' >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(z - 1, z' - 1))) :|: z - 1 >= 0, z' - 1 >= 0
add0(z, z') -{ 2 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 + 0 = v0, z - 1 = v1
add0(z, z') -{ 2 }→ 1 + x' :|: z - 1 >= 0, z' = 0, x' >= 0, z - 1 = 1 + 0, 1 + 0 = x'
add0(z, z') -{ 2 }→ 1 + y :|: z - 1 >= 0, z' = 0, 1 + 0 = 1 + 0, y >= 0, z - 1 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: O(1) [0], size: O(n1) [z + z'] add0: runtime: ?, size: O(n1) [z + z'] |
add0(z, z') -{ 1 }→ z' :|: z = 0, z' >= 0
add0(z, z') -{ 2 }→ plus(1 + 0, plus(1 + 0, add0(z - 1, z' - 1))) :|: z - 1 >= 0, z' - 1 >= 0
add0(z, z') -{ 2 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 + 0 = v0, z - 1 = v1
add0(z, z') -{ 2 }→ 1 + x' :|: z - 1 >= 0, z' = 0, x' >= 0, z - 1 = 1 + 0, 1 + 0 = x'
add0(z, z') -{ 2 }→ 1 + y :|: z - 1 >= 0, z' = 0, 1 + 0 = 1 + 0, y >= 0, z - 1 = y
plus(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
plus(z, z') -{ 0 }→ 1 + z :|: z >= 0, z' = 1 + 0
plus(z, z') -{ 0 }→ 1 + z' :|: z = 1 + 0, z' >= 0
plus: runtime: O(1) [0], size: O(n1) [z + z'] add0: runtime: O(n1) [2 + 2·z'], size: O(n1) [z + z'] |