0 CpxTRS
↳1 TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 TypeInferenceProof (BOTH BOUNDS(ID, ID), 0 ms)
↳4 CpxTypedWeightedTrs
↳5 CompletionProof (UPPER BOUND(ID), 0 ms)
↳6 CpxTypedWeightedCompleteTrs
↳7 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳10 CpxRNTS
↳11 InliningProof (UPPER BOUND(ID), 309 ms)
↳12 CpxRNTS
↳13 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 171 ms)
↳18 CpxRNTS
↳19 IntTrsBoundProof (UPPER BOUND(ID), 76 ms)
↳20 CpxRNTS
↳21 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 160 ms)
↳24 CpxRNTS
↳25 IntTrsBoundProof (UPPER BOUND(ID), 45 ms)
↳26 CpxRNTS
↳27 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳28 CpxRNTS
↳29 IntTrsBoundProof (UPPER BOUND(ID), 699 ms)
↳30 CpxRNTS
↳31 IntTrsBoundProof (UPPER BOUND(ID), 318 ms)
↳32 CpxRNTS
↳33 FinalProof (⇔, 0 ms)
↳34 BOUNDS(1, n^2)
cond(true, x) → cond(odd(x), p(p(p(x))))
odd(0) → false
odd(s(0)) → true
odd(s(s(x))) → odd(x)
p(0) → 0
p(s(x)) → x
cond(true, x) → cond(odd(x), p(p(p(x)))) [1]
odd(0) → false [1]
odd(s(0)) → true [1]
odd(s(s(x))) → odd(x) [1]
p(0) → 0 [1]
p(s(x)) → x [1]
cond(true, x) → cond(odd(x), p(p(p(x)))) [1]
odd(0) → false [1]
odd(s(0)) → true [1]
odd(s(s(x))) → odd(x) [1]
p(0) → 0 [1]
p(s(x)) → x [1]
cond :: true:false → 0:s → cond true :: true:false odd :: 0:s → true:false p :: 0:s → 0:s 0 :: 0:s false :: true:false s :: 0:s → 0:s |
(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:
cond
odd
p
const
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 |
true => 1
0 => 0
false => 0
const => 0
cond(z, z') -{ 3 }→ cond(odd(x'), p(p(1 + x'))) :|: z' = 1 + (1 + x'), z = 1, x' >= 0
cond(z, z') -{ 3 }→ cond(1, p(p(0))) :|: z = 1, z' = 1 + 0
cond(z, z') -{ 3 }→ cond(0, p(p(0))) :|: z = 1, z' = 0
odd(z) -{ 1 }→ odd(x) :|: x >= 0, z = 1 + (1 + x)
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ x :|: x >= 0, z = 1 + x
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ x :|: x >= 0, z = 1 + x
cond(z, z') -{ 5 }→ cond(odd(x'), x'') :|: z' = 1 + (1 + x'), z = 1, x' >= 0, x >= 0, 1 + x' = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(odd(x'), 0) :|: z' = 1 + (1 + x'), z = 1, x' >= 0, x >= 0, 1 + x' = 1 + x, x = 0
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ 1 }→ odd(x) :|: x >= 0, z = 1 + (1 + x)
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ x :|: x >= 0, z = 1 + x
p(z) -{ 1 }→ 0 :|: z = 0
cond(z, z') -{ 5 }→ cond(odd(z' - 2), x'') :|: z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(odd(z' - 2), 0) :|: z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ 1 }→ odd(z - 2) :|: z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
{ odd } { p } { cond } |
cond(z, z') -{ 5 }→ cond(odd(z' - 2), x'') :|: z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(odd(z' - 2), 0) :|: z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ 1 }→ odd(z - 2) :|: z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
cond(z, z') -{ 5 }→ cond(odd(z' - 2), x'') :|: z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(odd(z' - 2), 0) :|: z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ 1 }→ odd(z - 2) :|: z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
odd: runtime: ?, size: O(1) [1] |
cond(z, z') -{ 5 }→ cond(odd(z' - 2), x'') :|: z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(odd(z' - 2), 0) :|: z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ 1 }→ odd(z - 2) :|: z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
odd: runtime: O(n1) [1 + z], size: O(1) [1] |
cond(z, z') -{ 4 + z' }→ cond(s', 0) :|: s' >= 0, s' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 4 + z' }→ cond(s'', x'') :|: s'' >= 0, s'' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ z }→ s :|: s >= 0, s <= 1, z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
odd: runtime: O(n1) [1 + z], size: O(1) [1] |
cond(z, z') -{ 4 + z' }→ cond(s', 0) :|: s' >= 0, s' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 4 + z' }→ cond(s'', x'') :|: s'' >= 0, s'' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ z }→ s :|: s >= 0, s <= 1, z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
odd: runtime: O(n1) [1 + z], size: O(1) [1] p: runtime: ?, size: O(n1) [z] |
cond(z, z') -{ 4 + z' }→ cond(s', 0) :|: s' >= 0, s' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 4 + z' }→ cond(s'', x'') :|: s'' >= 0, s'' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ z }→ s :|: s >= 0, s <= 1, z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
odd: runtime: O(n1) [1 + z], size: O(1) [1] p: runtime: O(1) [1], size: O(n1) [z] |
cond(z, z') -{ 4 + z' }→ cond(s', 0) :|: s' >= 0, s' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 4 + z' }→ cond(s'', x'') :|: s'' >= 0, s'' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ z }→ s :|: s >= 0, s <= 1, z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
odd: runtime: O(n1) [1 + z], size: O(1) [1] p: runtime: O(1) [1], size: O(n1) [z] |
cond(z, z') -{ 4 + z' }→ cond(s', 0) :|: s' >= 0, s' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 4 + z' }→ cond(s'', x'') :|: s'' >= 0, s'' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ z }→ s :|: s >= 0, s <= 1, z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
odd: runtime: O(n1) [1 + z], size: O(1) [1] p: runtime: O(1) [1], size: O(n1) [z] cond: runtime: ?, size: O(1) [0] |
cond(z, z') -{ 4 + z' }→ cond(s', 0) :|: s' >= 0, s' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x = 0
cond(z, z') -{ 4 + z' }→ cond(s'', x'') :|: s'' >= 0, s'' <= 1, z = 1, z' - 2 >= 0, x >= 0, 1 + (z' - 2) = 1 + x, x'' >= 0, x = 1 + x''
cond(z, z') -{ 5 }→ cond(1, 0) :|: z = 1, z' = 1 + 0, 0 = 0
cond(z, z') -{ 5 }→ cond(0, 0) :|: z = 1, z' = 0, 0 = 0
odd(z) -{ z }→ s :|: s >= 0, s <= 1, z - 2 >= 0
odd(z) -{ 1 }→ 1 :|: z = 1 + 0
odd(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
odd: runtime: O(n1) [1 + z], size: O(1) [1] p: runtime: O(1) [1], size: O(n1) [z] cond: runtime: O(n2) [19 + 6·z' + z'2], size: O(1) [0] |