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 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳12 CpxRNTS
↳13 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 IntTrsBoundProof (UPPER BOUND(ID), 332 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 114 ms)
↳18 CpxRNTS
↳19 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳20 CpxRNTS
↳21 IntTrsBoundProof (UPPER BOUND(ID), 68 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 6 ms)
↳24 CpxRNTS
↳25 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳26 CpxRNTS
↳27 IntTrsBoundProof (UPPER BOUND(ID), 122 ms)
↳28 CpxRNTS
↳29 IntTrsBoundProof (UPPER BOUND(ID), 37 ms)
↳30 CpxRNTS
↳31 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳32 CpxRNTS
↳33 IntTrsBoundProof (UPPER BOUND(ID), 642 ms)
↳34 CpxRNTS
↳35 IntTrsBoundProof (UPPER BOUND(ID), 19 ms)
↳36 CpxRNTS
↳37 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳38 CpxRNTS
↳39 IntTrsBoundProof (UPPER BOUND(ID), 998 ms)
↳40 CpxRNTS
↳41 IntTrsBoundProof (UPPER BOUND(ID), 48 ms)
↳42 CpxRNTS
↳43 FinalProof (⇔, 0 ms)
↳44 BOUNDS(1, n^3)
mul0(C(x, y), y') → add0(mul0(y, y'), y')
mul0(Z, y) → Z
add0(C(x, y), y') → add0(y, C(S, y'))
add0(Z, y) → y
second(C(x, y)) → y
isZero(C(x, y)) → False
isZero(Z) → True
goal(xs, ys) → mul0(xs, ys)
mul0(C(x, y), y') → add0(mul0(y, y'), y') [1]
mul0(Z, y) → Z [1]
add0(C(x, y), y') → add0(y, C(S, y')) [1]
add0(Z, y) → y [1]
second(C(x, y)) → y [1]
isZero(C(x, y)) → False [1]
isZero(Z) → True [1]
goal(xs, ys) → mul0(xs, ys) [1]
mul0(C(x, y), y') → add0(mul0(y, y'), y') [1]
mul0(Z, y) → Z [1]
add0(C(x, y), y') → add0(y, C(S, y')) [1]
add0(Z, y) → y [1]
second(C(x, y)) → y [1]
isZero(C(x, y)) → False [1]
isZero(Z) → True [1]
goal(xs, ys) → mul0(xs, ys) [1]
mul0 :: C:Z → C:Z → C:Z C :: S → C:Z → C:Z add0 :: C:Z → C:Z → C:Z Z :: C:Z S :: S second :: C:Z → C:Z isZero :: C:Z → False:True False :: False:True True :: False:True goal :: C:Z → C:Z → C:Z |
(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:
second
isZero
goal
mul0
add0
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 |
Z => 0
S => 0
False => 0
True => 1
add0(z, z') -{ 1 }→ y :|: y >= 0, z = 0, z' = y
add0(z, z') -{ 1 }→ add0(y, 1 + 0 + y') :|: z' = y', z = 1 + x + y, x >= 0, y >= 0, y' >= 0
goal(z, z') -{ 1 }→ mul0(xs, ys) :|: xs >= 0, z = xs, z' = ys, ys >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', y'), y'), y') :|: z' = y', z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, y' >= 0
mul0(z, z') -{ 2 }→ add0(0, y') :|: z' = y', x >= 0, y' >= 0, z = 1 + x + 0
mul0(z, z') -{ 1 }→ 0 :|: y >= 0, z = 0, z' = y
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
add0(z, z') -{ 1 }→ add0(y, 1 + 0 + z') :|: z = 1 + x + y, x >= 0, y >= 0, z' >= 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(0, z') :|: z - 1 >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
{ add0 } { isZero } { second } { mul0 } { goal } |
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
add0(z, z') -{ 1 }→ add0(y, 1 + 0 + z') :|: z = 1 + x + y, x >= 0, y >= 0, z' >= 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(0, z') :|: z - 1 >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
add0(z, z') -{ 1 }→ add0(y, 1 + 0 + z') :|: z = 1 + x + y, x >= 0, y >= 0, z' >= 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(0, z') :|: z - 1 >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: ?, size: O(n1) [z + z'] |
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
add0(z, z') -{ 1 }→ add0(y, 1 + 0 + z') :|: z = 1 + x + y, x >= 0, y >= 0, z' >= 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(0, z') :|: z - 1 >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: ?, size: O(1) [1] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: ?, size: O(n1) [z] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n1) [z] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n1) [z] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n1) [z] mul0: runtime: ?, size: O(n2) [2·z·z' + z'] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 1 }→ mul0(z, z') :|: z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 2 }→ add0(add0(mul0(y'', z'), z'), z') :|: z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n1) [z] mul0: runtime: O(n3) [4 + 4·z + 3·z·z' + 4·z2·z'], size: O(n2) [2·z·z' + z'] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 5 + 4·z + 3·z·z' + 4·z2·z' }→ s3 :|: s3 >= 0, s3 <= 2 * (z' * z) + 1 * z', z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 8 + s'' + s1 + 4·y'' + 3·y''·z' + 4·y''2·z' }→ s2 :|: s'' >= 0, s'' <= 2 * (z' * y'') + 1 * z', s1 >= 0, s1 <= 1 * s'' + 1 * z', s2 >= 0, s2 <= 1 * s1 + 1 * z', z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n1) [z] mul0: runtime: O(n3) [4 + 4·z + 3·z·z' + 4·z2·z'], size: O(n2) [2·z·z' + z'] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 5 + 4·z + 3·z·z' + 4·z2·z' }→ s3 :|: s3 >= 0, s3 <= 2 * (z' * z) + 1 * z', z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 8 + s'' + s1 + 4·y'' + 3·y''·z' + 4·y''2·z' }→ s2 :|: s'' >= 0, s'' <= 2 * (z' * y'') + 1 * z', s1 >= 0, s1 <= 1 * s'' + 1 * z', s2 >= 0, s2 <= 1 * s1 + 1 * z', z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n1) [z] mul0: runtime: O(n3) [4 + 4·z + 3·z·z' + 4·z2·z'], size: O(n2) [2·z·z' + z'] goal: runtime: ?, size: O(n2) [2·z·z' + z'] |
add0(z, z') -{ 2 + y }→ s' :|: s' >= 0, s' <= 1 * y + 1 * (1 + 0 + z'), z = 1 + x + y, x >= 0, y >= 0, z' >= 0
add0(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
goal(z, z') -{ 5 + 4·z + 3·z·z' + 4·z2·z' }→ s3 :|: s3 >= 0, s3 <= 2 * (z' * z) + 1 * z', z >= 0, z' >= 0
isZero(z) -{ 1 }→ 1 :|: z = 0
isZero(z) -{ 1 }→ 0 :|: z = 1 + x + y, x >= 0, y >= 0
mul0(z, z') -{ 3 }→ s :|: s >= 0, s <= 1 * 0 + 1 * z', z - 1 >= 0, z' >= 0
mul0(z, z') -{ 8 + s'' + s1 + 4·y'' + 3·y''·z' + 4·y''2·z' }→ s2 :|: s'' >= 0, s'' <= 2 * (z' * y'') + 1 * z', s1 >= 0, s1 <= 1 * s'' + 1 * z', s2 >= 0, s2 <= 1 * s1 + 1 * z', z = 1 + x + (1 + x' + y''), x >= 0, x' >= 0, y'' >= 0, z' >= 0
mul0(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
second(z) -{ 1 }→ y :|: z = 1 + x + y, x >= 0, y >= 0
add0: runtime: O(n1) [1 + z], size: O(n1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n1) [z] mul0: runtime: O(n3) [4 + 4·z + 3·z·z' + 4·z2·z'], size: O(n2) [2·z·z' + z'] goal: runtime: O(n3) [5 + 4·z + 3·z·z' + 4·z2·z'], size: O(n2) [2·z·z' + z'] |