WORST_CASE(Omega(n^3),O(n^3)) proof of input_rnhkVEf5hU.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^3, n^3). (0) CpxTRS (1) RelTrsToWeightedTrsProof [UPPER BOUND(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) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (16) CpxRNTS (17) IntTrsBoundProof [UPPER BOUND(ID), 245 ms] (18) CpxRNTS (19) IntTrsBoundProof [UPPER BOUND(ID), 129 ms] (20) CpxRNTS (21) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 82 ms] (24) CpxRNTS (25) IntTrsBoundProof [UPPER BOUND(ID), 33 ms] (26) CpxRNTS (27) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 189 ms] (30) CpxRNTS (31) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (32) CpxRNTS (33) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 492 ms] (36) CpxRNTS (37) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (38) CpxRNTS (39) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 579 ms] (42) CpxRNTS (43) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (44) CpxRNTS (45) FinalProof [FINISHED, 0 ms] (46) BOUNDS(1, n^3) (47) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 0 ms] (48) CdtProblem (49) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (50) CpxRelTRS (51) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (52) CpxRelTRS (53) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (54) typed CpxTrs (55) OrderProof [LOWER BOUND(ID), 16 ms] (56) typed CpxTrs (57) RewriteLemmaProof [LOWER BOUND(ID), 325 ms] (58) BEST (59) proven lower bound (60) LowerBoundPropagationProof [FINISHED, 0 ms] (61) BOUNDS(n^1, INF) (62) typed CpxTrs (63) RewriteLemmaProof [LOWER BOUND(ID), 145 ms] (64) typed CpxTrs (65) RewriteLemmaProof [LOWER BOUND(ID), 113 ms] (66) typed CpxTrs (67) RewriteLemmaProof [LOWER BOUND(ID), 2157 ms] (68) proven lower bound (69) LowerBoundPropagationProof [FINISHED, 0 ms] (70) BOUNDS(n^3, INF) ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^3, n^3). The TRS R consists of the following rules: 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) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (2) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^3). The TRS R consists of the following rules: 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] Rewrite Strategy: INNERMOST ---------------------------------------- (3) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (4) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: 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] The TRS has the following type information: 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 Rewrite Strategy: INNERMOST ---------------------------------------- (5) CompletionProof (UPPER BOUND(ID)) 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: second_1 isZero_1 goal_2 (c) The following functions are completely defined: mul0_2 add0_2 Due to the following rules being added: none And the following fresh constants: none ---------------------------------------- (6) 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: 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] The TRS has the following type information: 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 Rewrite Strategy: INNERMOST ---------------------------------------- (7) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (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: mul0(C(x, C(x', y'')), y') -> add0(add0(mul0(y'', y'), y'), y') [2] mul0(C(x, Z), y') -> add0(Z, y') [2] 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] The TRS has the following type information: 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 Rewrite Strategy: INNERMOST ---------------------------------------- (9) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: Z => 0 S => 0 False => 0 True => 1 ---------------------------------------- (10) Obligation: Complexity RNTS consisting of the following rules: 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 ---------------------------------------- (11) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (12) Obligation: Complexity RNTS consisting of the following rules: 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 ---------------------------------------- (13) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { add0 } { isZero } { second } { mul0 } { goal } ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: 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 Function symbols to be analyzed: {add0}, {isZero}, {second}, {mul0}, {goal} ---------------------------------------- (15) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: 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 Function symbols to be analyzed: {add0}, {isZero}, {second}, {mul0}, {goal} ---------------------------------------- (17) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: add0 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: 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 Function symbols to be analyzed: {add0}, {isZero}, {second}, {mul0}, {goal} Previous analysis results are: add0: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (19) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: add0 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: 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 Function symbols to be analyzed: {isZero}, {second}, {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] ---------------------------------------- (21) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {isZero}, {second}, {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {isZero}, {second}, {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: ?, size: O(1) [1] ---------------------------------------- (25) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {second}, {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (27) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {second}, {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: second after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {second}, {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: ?, size: O(n^1) [z] ---------------------------------------- (31) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: second after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (33) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: mul0 after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2*z*z' + z' ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {mul0}, {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n^1) [z] mul0: runtime: ?, size: O(n^2) [2*z*z' + z'] ---------------------------------------- (37) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: mul0 after applying outer abstraction to obtain an ITS, resulting in: O(n^3) with polynomial bound: 4 + 4*z + 3*z*z' + 4*z^2*z' ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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 <= 0 + 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 Function symbols to be analyzed: {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n^1) [z] mul0: runtime: O(n^3) [4 + 4*z + 3*z*z' + 4*z^2*z'], size: O(n^2) [2*z*z' + z'] ---------------------------------------- (39) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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*z^2*z' }-> s3 :|: s3 >= 0, s3 <= 2 * (z' * 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 <= 0 + 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'') + z', s1 >= 0, s1 <= s'' + z', s2 >= 0, s2 <= s1 + 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 Function symbols to be analyzed: {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n^1) [z] mul0: runtime: O(n^3) [4 + 4*z + 3*z*z' + 4*z^2*z'], size: O(n^2) [2*z*z' + z'] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: goal after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2*z*z' + z' ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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*z^2*z' }-> s3 :|: s3 >= 0, s3 <= 2 * (z' * 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 <= 0 + 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'') + z', s1 >= 0, s1 <= s'' + z', s2 >= 0, s2 <= s1 + 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 Function symbols to be analyzed: {goal} Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n^1) [z] mul0: runtime: O(n^3) [4 + 4*z + 3*z*z' + 4*z^2*z'], size: O(n^2) [2*z*z' + z'] goal: runtime: ?, size: O(n^2) [2*z*z' + z'] ---------------------------------------- (43) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: goal after applying outer abstraction to obtain an ITS, resulting in: O(n^3) with polynomial bound: 5 + 4*z + 3*z*z' + 4*z^2*z' ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: add0(z, z') -{ 2 + y }-> s' :|: s' >= 0, s' <= y + (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*z^2*z' }-> s3 :|: s3 >= 0, s3 <= 2 * (z' * 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 <= 0 + 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'') + z', s1 >= 0, s1 <= s'' + z', s2 >= 0, s2 <= s1 + 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 Function symbols to be analyzed: Previous analysis results are: add0: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] isZero: runtime: O(1) [1], size: O(1) [1] second: runtime: O(1) [1], size: O(n^1) [z] mul0: runtime: O(n^3) [4 + 4*z + 3*z*z' + 4*z^2*z'], size: O(n^2) [2*z*z' + z'] goal: runtime: O(n^3) [5 + 4*z + 3*z*z' + 4*z^2*z'], size: O(n^2) [2*z*z' + z'] ---------------------------------------- (45) FinalProof (FINISHED) Computed overall runtime complexity ---------------------------------------- (46) BOUNDS(1, n^3) ---------------------------------------- (47) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (48) Obligation: Complexity Dependency Tuples Problem Rules: mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Tuples: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) S tuples: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) K tuples:none Defined Rule Symbols: mul0_2, add0_2, second_1, isZero_1, goal_2 Defined Pair Symbols: MUL0_2, ADD0_2, SECOND_1, ISZERO_1, GOAL_2 Compound Symbols: c_2, c1, c2_1, c3, c4, c5, c6, c7_1 ---------------------------------------- (49) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (50) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, INF). The TRS R consists of the following rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) The (relative) TRS S consists of the following rules: mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Rewrite Strategy: INNERMOST ---------------------------------------- (51) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (52) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, INF). The TRS R consists of the following rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) The (relative) TRS S consists of the following rules: mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Rewrite Strategy: INNERMOST ---------------------------------------- (53) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (54) Obligation: Innermost TRS: Rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Types: MUL0 :: C:Z -> C:Z -> c:c1 C :: S -> C:Z -> C:Z c :: c2:c3 -> c:c1 -> c:c1 ADD0 :: C:Z -> C:Z -> c2:c3 mul0 :: C:Z -> C:Z -> C:Z Z :: C:Z c1 :: c:c1 c2 :: c2:c3 -> c2:c3 S :: S c3 :: c2:c3 SECOND :: C:Z -> c4 c4 :: c4 ISZERO :: C:Z -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 GOAL :: C:Z -> C:Z -> c7 c7 :: c:c1 -> c7 add0 :: C:Z -> C:Z -> C:Z second :: C:Z -> C:Z isZero :: C:Z -> False:True False :: False:True True :: False:True goal :: C:Z -> C:Z -> C:Z hole_c:c11_8 :: c:c1 hole_C:Z2_8 :: C:Z hole_S3_8 :: S hole_c2:c34_8 :: c2:c3 hole_c45_8 :: c4 hole_c5:c66_8 :: c5:c6 hole_c77_8 :: c7 hole_False:True8_8 :: False:True gen_c:c19_8 :: Nat -> c:c1 gen_C:Z10_8 :: Nat -> C:Z gen_c2:c311_8 :: Nat -> c2:c3 ---------------------------------------- (55) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: MUL0, ADD0, mul0, add0 They will be analysed ascendingly in the following order: ADD0 < MUL0 mul0 < MUL0 add0 < mul0 ---------------------------------------- (56) Obligation: Innermost TRS: Rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Types: MUL0 :: C:Z -> C:Z -> c:c1 C :: S -> C:Z -> C:Z c :: c2:c3 -> c:c1 -> c:c1 ADD0 :: C:Z -> C:Z -> c2:c3 mul0 :: C:Z -> C:Z -> C:Z Z :: C:Z c1 :: c:c1 c2 :: c2:c3 -> c2:c3 S :: S c3 :: c2:c3 SECOND :: C:Z -> c4 c4 :: c4 ISZERO :: C:Z -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 GOAL :: C:Z -> C:Z -> c7 c7 :: c:c1 -> c7 add0 :: C:Z -> C:Z -> C:Z second :: C:Z -> C:Z isZero :: C:Z -> False:True False :: False:True True :: False:True goal :: C:Z -> C:Z -> C:Z hole_c:c11_8 :: c:c1 hole_C:Z2_8 :: C:Z hole_S3_8 :: S hole_c2:c34_8 :: c2:c3 hole_c45_8 :: c4 hole_c5:c66_8 :: c5:c6 hole_c77_8 :: c7 hole_False:True8_8 :: False:True gen_c:c19_8 :: Nat -> c:c1 gen_C:Z10_8 :: Nat -> C:Z gen_c2:c311_8 :: Nat -> c2:c3 Generator Equations: gen_c:c19_8(0) <=> c1 gen_c:c19_8(+(x, 1)) <=> c(c3, gen_c:c19_8(x)) gen_C:Z10_8(0) <=> Z gen_C:Z10_8(+(x, 1)) <=> C(S, gen_C:Z10_8(x)) gen_c2:c311_8(0) <=> c3 gen_c2:c311_8(+(x, 1)) <=> c2(gen_c2:c311_8(x)) The following defined symbols remain to be analysed: ADD0, MUL0, mul0, add0 They will be analysed ascendingly in the following order: ADD0 < MUL0 mul0 < MUL0 add0 < mul0 ---------------------------------------- (57) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: ADD0(gen_C:Z10_8(n13_8), gen_C:Z10_8(b)) -> gen_c2:c311_8(n13_8), rt in Omega(1 + n13_8) Induction Base: ADD0(gen_C:Z10_8(0), gen_C:Z10_8(b)) ->_R^Omega(1) c3 Induction Step: ADD0(gen_C:Z10_8(+(n13_8, 1)), gen_C:Z10_8(b)) ->_R^Omega(1) c2(ADD0(gen_C:Z10_8(n13_8), C(S, gen_C:Z10_8(b)))) ->_IH c2(gen_c2:c311_8(c14_8)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (58) Complex Obligation (BEST) ---------------------------------------- (59) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Types: MUL0 :: C:Z -> C:Z -> c:c1 C :: S -> C:Z -> C:Z c :: c2:c3 -> c:c1 -> c:c1 ADD0 :: C:Z -> C:Z -> c2:c3 mul0 :: C:Z -> C:Z -> C:Z Z :: C:Z c1 :: c:c1 c2 :: c2:c3 -> c2:c3 S :: S c3 :: c2:c3 SECOND :: C:Z -> c4 c4 :: c4 ISZERO :: C:Z -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 GOAL :: C:Z -> C:Z -> c7 c7 :: c:c1 -> c7 add0 :: C:Z -> C:Z -> C:Z second :: C:Z -> C:Z isZero :: C:Z -> False:True False :: False:True True :: False:True goal :: C:Z -> C:Z -> C:Z hole_c:c11_8 :: c:c1 hole_C:Z2_8 :: C:Z hole_S3_8 :: S hole_c2:c34_8 :: c2:c3 hole_c45_8 :: c4 hole_c5:c66_8 :: c5:c6 hole_c77_8 :: c7 hole_False:True8_8 :: False:True gen_c:c19_8 :: Nat -> c:c1 gen_C:Z10_8 :: Nat -> C:Z gen_c2:c311_8 :: Nat -> c2:c3 Generator Equations: gen_c:c19_8(0) <=> c1 gen_c:c19_8(+(x, 1)) <=> c(c3, gen_c:c19_8(x)) gen_C:Z10_8(0) <=> Z gen_C:Z10_8(+(x, 1)) <=> C(S, gen_C:Z10_8(x)) gen_c2:c311_8(0) <=> c3 gen_c2:c311_8(+(x, 1)) <=> c2(gen_c2:c311_8(x)) The following defined symbols remain to be analysed: ADD0, MUL0, mul0, add0 They will be analysed ascendingly in the following order: ADD0 < MUL0 mul0 < MUL0 add0 < mul0 ---------------------------------------- (60) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (61) BOUNDS(n^1, INF) ---------------------------------------- (62) Obligation: Innermost TRS: Rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Types: MUL0 :: C:Z -> C:Z -> c:c1 C :: S -> C:Z -> C:Z c :: c2:c3 -> c:c1 -> c:c1 ADD0 :: C:Z -> C:Z -> c2:c3 mul0 :: C:Z -> C:Z -> C:Z Z :: C:Z c1 :: c:c1 c2 :: c2:c3 -> c2:c3 S :: S c3 :: c2:c3 SECOND :: C:Z -> c4 c4 :: c4 ISZERO :: C:Z -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 GOAL :: C:Z -> C:Z -> c7 c7 :: c:c1 -> c7 add0 :: C:Z -> C:Z -> C:Z second :: C:Z -> C:Z isZero :: C:Z -> False:True False :: False:True True :: False:True goal :: C:Z -> C:Z -> C:Z hole_c:c11_8 :: c:c1 hole_C:Z2_8 :: C:Z hole_S3_8 :: S hole_c2:c34_8 :: c2:c3 hole_c45_8 :: c4 hole_c5:c66_8 :: c5:c6 hole_c77_8 :: c7 hole_False:True8_8 :: False:True gen_c:c19_8 :: Nat -> c:c1 gen_C:Z10_8 :: Nat -> C:Z gen_c2:c311_8 :: Nat -> c2:c3 Lemmas: ADD0(gen_C:Z10_8(n13_8), gen_C:Z10_8(b)) -> gen_c2:c311_8(n13_8), rt in Omega(1 + n13_8) Generator Equations: gen_c:c19_8(0) <=> c1 gen_c:c19_8(+(x, 1)) <=> c(c3, gen_c:c19_8(x)) gen_C:Z10_8(0) <=> Z gen_C:Z10_8(+(x, 1)) <=> C(S, gen_C:Z10_8(x)) gen_c2:c311_8(0) <=> c3 gen_c2:c311_8(+(x, 1)) <=> c2(gen_c2:c311_8(x)) The following defined symbols remain to be analysed: add0, MUL0, mul0 They will be analysed ascendingly in the following order: mul0 < MUL0 add0 < mul0 ---------------------------------------- (63) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: add0(gen_C:Z10_8(n564_8), gen_C:Z10_8(b)) -> gen_C:Z10_8(+(n564_8, b)), rt in Omega(0) Induction Base: add0(gen_C:Z10_8(0), gen_C:Z10_8(b)) ->_R^Omega(0) gen_C:Z10_8(b) Induction Step: add0(gen_C:Z10_8(+(n564_8, 1)), gen_C:Z10_8(b)) ->_R^Omega(0) add0(gen_C:Z10_8(n564_8), C(S, gen_C:Z10_8(b))) ->_IH gen_C:Z10_8(+(+(b, 1), c565_8)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (64) Obligation: Innermost TRS: Rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Types: MUL0 :: C:Z -> C:Z -> c:c1 C :: S -> C:Z -> C:Z c :: c2:c3 -> c:c1 -> c:c1 ADD0 :: C:Z -> C:Z -> c2:c3 mul0 :: C:Z -> C:Z -> C:Z Z :: C:Z c1 :: c:c1 c2 :: c2:c3 -> c2:c3 S :: S c3 :: c2:c3 SECOND :: C:Z -> c4 c4 :: c4 ISZERO :: C:Z -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 GOAL :: C:Z -> C:Z -> c7 c7 :: c:c1 -> c7 add0 :: C:Z -> C:Z -> C:Z second :: C:Z -> C:Z isZero :: C:Z -> False:True False :: False:True True :: False:True goal :: C:Z -> C:Z -> C:Z hole_c:c11_8 :: c:c1 hole_C:Z2_8 :: C:Z hole_S3_8 :: S hole_c2:c34_8 :: c2:c3 hole_c45_8 :: c4 hole_c5:c66_8 :: c5:c6 hole_c77_8 :: c7 hole_False:True8_8 :: False:True gen_c:c19_8 :: Nat -> c:c1 gen_C:Z10_8 :: Nat -> C:Z gen_c2:c311_8 :: Nat -> c2:c3 Lemmas: ADD0(gen_C:Z10_8(n13_8), gen_C:Z10_8(b)) -> gen_c2:c311_8(n13_8), rt in Omega(1 + n13_8) add0(gen_C:Z10_8(n564_8), gen_C:Z10_8(b)) -> gen_C:Z10_8(+(n564_8, b)), rt in Omega(0) Generator Equations: gen_c:c19_8(0) <=> c1 gen_c:c19_8(+(x, 1)) <=> c(c3, gen_c:c19_8(x)) gen_C:Z10_8(0) <=> Z gen_C:Z10_8(+(x, 1)) <=> C(S, gen_C:Z10_8(x)) gen_c2:c311_8(0) <=> c3 gen_c2:c311_8(+(x, 1)) <=> c2(gen_c2:c311_8(x)) The following defined symbols remain to be analysed: mul0, MUL0 They will be analysed ascendingly in the following order: mul0 < MUL0 ---------------------------------------- (65) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: mul0(gen_C:Z10_8(n1564_8), gen_C:Z10_8(b)) -> gen_C:Z10_8(*(n1564_8, b)), rt in Omega(0) Induction Base: mul0(gen_C:Z10_8(0), gen_C:Z10_8(b)) ->_R^Omega(0) Z Induction Step: mul0(gen_C:Z10_8(+(n1564_8, 1)), gen_C:Z10_8(b)) ->_R^Omega(0) add0(mul0(gen_C:Z10_8(n1564_8), gen_C:Z10_8(b)), gen_C:Z10_8(b)) ->_IH add0(gen_C:Z10_8(*(c1565_8, b)), gen_C:Z10_8(b)) ->_L^Omega(0) gen_C:Z10_8(+(*(n1564_8, b), b)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (66) Obligation: Innermost TRS: Rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Types: MUL0 :: C:Z -> C:Z -> c:c1 C :: S -> C:Z -> C:Z c :: c2:c3 -> c:c1 -> c:c1 ADD0 :: C:Z -> C:Z -> c2:c3 mul0 :: C:Z -> C:Z -> C:Z Z :: C:Z c1 :: c:c1 c2 :: c2:c3 -> c2:c3 S :: S c3 :: c2:c3 SECOND :: C:Z -> c4 c4 :: c4 ISZERO :: C:Z -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 GOAL :: C:Z -> C:Z -> c7 c7 :: c:c1 -> c7 add0 :: C:Z -> C:Z -> C:Z second :: C:Z -> C:Z isZero :: C:Z -> False:True False :: False:True True :: False:True goal :: C:Z -> C:Z -> C:Z hole_c:c11_8 :: c:c1 hole_C:Z2_8 :: C:Z hole_S3_8 :: S hole_c2:c34_8 :: c2:c3 hole_c45_8 :: c4 hole_c5:c66_8 :: c5:c6 hole_c77_8 :: c7 hole_False:True8_8 :: False:True gen_c:c19_8 :: Nat -> c:c1 gen_C:Z10_8 :: Nat -> C:Z gen_c2:c311_8 :: Nat -> c2:c3 Lemmas: ADD0(gen_C:Z10_8(n13_8), gen_C:Z10_8(b)) -> gen_c2:c311_8(n13_8), rt in Omega(1 + n13_8) add0(gen_C:Z10_8(n564_8), gen_C:Z10_8(b)) -> gen_C:Z10_8(+(n564_8, b)), rt in Omega(0) mul0(gen_C:Z10_8(n1564_8), gen_C:Z10_8(b)) -> gen_C:Z10_8(*(n1564_8, b)), rt in Omega(0) Generator Equations: gen_c:c19_8(0) <=> c1 gen_c:c19_8(+(x, 1)) <=> c(c3, gen_c:c19_8(x)) gen_C:Z10_8(0) <=> Z gen_C:Z10_8(+(x, 1)) <=> C(S, gen_C:Z10_8(x)) gen_c2:c311_8(0) <=> c3 gen_c2:c311_8(+(x, 1)) <=> c2(gen_c2:c311_8(x)) The following defined symbols remain to be analysed: MUL0 ---------------------------------------- (67) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: MUL0(gen_C:Z10_8(+(1, n2692_8)), gen_C:Z10_8(b)) -> *12_8, rt in Omega(b*n2692_8 + b*n2692_8^2 + n2692_8) Induction Base: MUL0(gen_C:Z10_8(+(1, 0)), gen_C:Z10_8(b)) Induction Step: MUL0(gen_C:Z10_8(+(1, +(n2692_8, 1))), gen_C:Z10_8(b)) ->_R^Omega(1) c(ADD0(mul0(gen_C:Z10_8(+(1, n2692_8)), gen_C:Z10_8(b)), gen_C:Z10_8(b)), MUL0(gen_C:Z10_8(+(1, n2692_8)), gen_C:Z10_8(b))) ->_L^Omega(0) c(ADD0(gen_C:Z10_8(*(+(1, n2692_8), b)), gen_C:Z10_8(b)), MUL0(gen_C:Z10_8(+(1, n2692_8)), gen_C:Z10_8(b))) ->_L^Omega(1 + b + b*n2692_8) c(gen_c2:c311_8(+(b, *(n2692_8, b))), MUL0(gen_C:Z10_8(+(1, n2692_8)), gen_C:Z10_8(b))) ->_IH c(gen_c2:c311_8(+(b, *(n2692_8, b))), *12_8) We have rt in Omega(n^3) and sz in O(n). Thus, we have irc_R in Omega(n^3). ---------------------------------------- (68) Obligation: Proved the lower bound n^3 for the following obligation: Innermost TRS: Rules: MUL0(C(z0, z1), z2) -> c(ADD0(mul0(z1, z2), z2), MUL0(z1, z2)) MUL0(Z, z0) -> c1 ADD0(C(z0, z1), z2) -> c2(ADD0(z1, C(S, z2))) ADD0(Z, z0) -> c3 SECOND(C(z0, z1)) -> c4 ISZERO(C(z0, z1)) -> c5 ISZERO(Z) -> c6 GOAL(z0, z1) -> c7(MUL0(z0, z1)) mul0(C(z0, z1), z2) -> add0(mul0(z1, z2), z2) mul0(Z, z0) -> Z add0(C(z0, z1), z2) -> add0(z1, C(S, z2)) add0(Z, z0) -> z0 second(C(z0, z1)) -> z1 isZero(C(z0, z1)) -> False isZero(Z) -> True goal(z0, z1) -> mul0(z0, z1) Types: MUL0 :: C:Z -> C:Z -> c:c1 C :: S -> C:Z -> C:Z c :: c2:c3 -> c:c1 -> c:c1 ADD0 :: C:Z -> C:Z -> c2:c3 mul0 :: C:Z -> C:Z -> C:Z Z :: C:Z c1 :: c:c1 c2 :: c2:c3 -> c2:c3 S :: S c3 :: c2:c3 SECOND :: C:Z -> c4 c4 :: c4 ISZERO :: C:Z -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 GOAL :: C:Z -> C:Z -> c7 c7 :: c:c1 -> c7 add0 :: C:Z -> C:Z -> C:Z second :: C:Z -> C:Z isZero :: C:Z -> False:True False :: False:True True :: False:True goal :: C:Z -> C:Z -> C:Z hole_c:c11_8 :: c:c1 hole_C:Z2_8 :: C:Z hole_S3_8 :: S hole_c2:c34_8 :: c2:c3 hole_c45_8 :: c4 hole_c5:c66_8 :: c5:c6 hole_c77_8 :: c7 hole_False:True8_8 :: False:True gen_c:c19_8 :: Nat -> c:c1 gen_C:Z10_8 :: Nat -> C:Z gen_c2:c311_8 :: Nat -> c2:c3 Lemmas: ADD0(gen_C:Z10_8(n13_8), gen_C:Z10_8(b)) -> gen_c2:c311_8(n13_8), rt in Omega(1 + n13_8) add0(gen_C:Z10_8(n564_8), gen_C:Z10_8(b)) -> gen_C:Z10_8(+(n564_8, b)), rt in Omega(0) mul0(gen_C:Z10_8(n1564_8), gen_C:Z10_8(b)) -> gen_C:Z10_8(*(n1564_8, b)), rt in Omega(0) Generator Equations: gen_c:c19_8(0) <=> c1 gen_c:c19_8(+(x, 1)) <=> c(c3, gen_c:c19_8(x)) gen_C:Z10_8(0) <=> Z gen_C:Z10_8(+(x, 1)) <=> C(S, gen_C:Z10_8(x)) gen_c2:c311_8(0) <=> c3 gen_c2:c311_8(+(x, 1)) <=> c2(gen_c2:c311_8(x)) The following defined symbols remain to be analysed: MUL0 ---------------------------------------- (69) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (70) BOUNDS(n^3, INF)