KILLED proof of input_R2RwzUVYVD.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). (0) CpxTRS (1) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (2) CpxTRS (3) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (4) CpxTRS (5) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (6) CpxWeightedTrs (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxTypedWeightedTrs (9) CompletionProof [UPPER BOUND(ID), 0 ms] (10) CpxTypedWeightedCompleteTrs (11) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CpxTypedWeightedCompleteTrs (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (14) CpxRNTS (15) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CpxRNTS (17) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CpxRNTS (19) ResultPropagationProof [UPPER BOUND(ID), 2 ms] (20) CpxRNTS (21) IntTrsBoundProof [UPPER BOUND(ID), 362 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 127 ms] (24) CpxRNTS (25) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (26) CpxRNTS (27) IntTrsBoundProof [UPPER BOUND(ID), 262 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] (30) CpxRNTS (31) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (32) CpxRNTS (33) IntTrsBoundProof [UPPER BOUND(ID), 447 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 158 ms] (36) CpxRNTS (37) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (38) CpxRNTS (39) IntTrsBoundProof [UPPER BOUND(ID), 4322 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 438 ms] (42) CpxRNTS (43) CompletionProof [UPPER BOUND(ID), 0 ms] (44) CpxTypedWeightedCompleteTrs (45) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (46) CpxRNTS (47) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (48) CdtProblem (49) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (50) CdtProblem (51) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (52) CdtProblem (53) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (54) CdtProblem (55) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (56) CdtProblem (57) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (58) CdtProblem (59) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (60) CdtProblem (61) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 2 ms] (62) CdtProblem (63) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (64) CdtProblem (65) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (66) CdtProblem (67) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (68) CdtProblem (69) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (70) CdtProblem (71) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (72) CdtProblem (73) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (74) CdtProblem (75) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (76) CdtProblem (77) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (78) CdtProblem (79) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (80) CdtProblem (81) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (82) CdtProblem (83) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (84) CdtProblem (85) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (86) CdtProblem (87) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (88) CdtProblem (89) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (90) CdtProblem (91) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (92) CdtProblem (93) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 0 ms] (94) CdtProblem (95) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (96) CdtProblem (97) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (98) CdtProblem (99) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 25 ms] (100) CdtProblem (101) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (102) CdtProblem (103) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (104) CdtProblem (105) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CdtProblem (107) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CdtProblem (109) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (110) CdtProblem (111) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (112) CdtProblem (113) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (114) CdtProblem (115) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (116) CdtProblem (117) CdtRuleRemovalProof [UPPER BOUND(ADD(n^3)), 7012 ms] (118) CdtProblem (119) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (120) CdtProblem ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: lt(0, s(x)) -> true lt(x, 0) -> false lt(s(x), s(y)) -> lt(x, y) times(0, y) -> 0 times(s(x), y) -> plus(y, times(x, y)) plus(0, y) -> y plus(s(x), y) -> s(plus(x, y)) fac(x) -> loop(x, s(0), s(0)) loop(x, c, y) -> if(lt(x, c), x, c, y) if(false, x, c, y) -> loop(x, s(c), times(y, s(c))) if(true, x, c, y) -> y S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (2) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: lt(0', s(x)) -> true lt(x, 0') -> false lt(s(x), s(y)) -> lt(x, y) times(0', y) -> 0' times(s(x), y) -> plus(y, times(x, y)) plus(0', y) -> y plus(s(x), y) -> s(plus(x, y)) fac(x) -> loop(x, s(0'), s(0')) loop(x, c, y) -> if(lt(x, c), x, c, y) if(false, x, c, y) -> loop(x, s(c), times(y, s(c))) if(true, x, c, y) -> y S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (3) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (4) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: lt(0, s(x)) -> true lt(x, 0) -> false lt(s(x), s(y)) -> lt(x, y) times(0, y) -> 0 times(s(x), y) -> plus(y, times(x, y)) plus(0, y) -> y plus(s(x), y) -> s(plus(x, y)) fac(x) -> loop(x, s(0), s(0)) loop(x, c, y) -> if(lt(x, c), x, c, y) if(false, x, c, y) -> loop(x, s(c), times(y, s(c))) if(true, x, c, y) -> y S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (5) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: lt(0, s(x)) -> true [1] lt(x, 0) -> false [1] lt(s(x), s(y)) -> lt(x, y) [1] times(0, y) -> 0 [1] times(s(x), y) -> plus(y, times(x, y)) [1] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] fac(x) -> loop(x, s(0), s(0)) [1] loop(x, c, y) -> if(lt(x, c), x, c, y) [1] if(false, x, c, y) -> loop(x, s(c), times(y, s(c))) [1] if(true, x, c, y) -> y [1] Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (8) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: lt(0, s(x)) -> true [1] lt(x, 0) -> false [1] lt(s(x), s(y)) -> lt(x, y) [1] times(0, y) -> 0 [1] times(s(x), y) -> plus(y, times(x, y)) [1] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] fac(x) -> loop(x, s(0), s(0)) [1] loop(x, c, y) -> if(lt(x, c), x, c, y) [1] if(false, x, c, y) -> loop(x, s(c), times(y, s(c))) [1] if(true, x, c, y) -> y [1] The TRS has the following type information: lt :: 0:s -> 0:s -> true:false 0 :: 0:s s :: 0:s -> 0:s true :: true:false false :: true:false times :: 0:s -> 0:s -> 0:s plus :: 0:s -> 0:s -> 0:s fac :: 0:s -> 0:s loop :: 0:s -> 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s Rewrite Strategy: INNERMOST ---------------------------------------- (9) 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: fac_1 loop_3 if_4 (c) The following functions are completely defined: times_2 lt_2 plus_2 Due to the following rules being added: none And the following fresh constants: none ---------------------------------------- (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: lt(0, s(x)) -> true [1] lt(x, 0) -> false [1] lt(s(x), s(y)) -> lt(x, y) [1] times(0, y) -> 0 [1] times(s(x), y) -> plus(y, times(x, y)) [1] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] fac(x) -> loop(x, s(0), s(0)) [1] loop(x, c, y) -> if(lt(x, c), x, c, y) [1] if(false, x, c, y) -> loop(x, s(c), times(y, s(c))) [1] if(true, x, c, y) -> y [1] The TRS has the following type information: lt :: 0:s -> 0:s -> true:false 0 :: 0:s s :: 0:s -> 0:s true :: true:false false :: true:false times :: 0:s -> 0:s -> 0:s plus :: 0:s -> 0:s -> 0:s fac :: 0:s -> 0:s loop :: 0:s -> 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s Rewrite Strategy: INNERMOST ---------------------------------------- (11) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (12) 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: lt(0, s(x)) -> true [1] lt(x, 0) -> false [1] lt(s(x), s(y)) -> lt(x, y) [1] times(0, y) -> 0 [1] times(s(0), y) -> plus(y, 0) [2] times(s(s(x')), y) -> plus(y, plus(y, times(x', y))) [2] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] fac(x) -> loop(x, s(0), s(0)) [1] loop(0, s(x''), y) -> if(true, 0, s(x''), y) [2] loop(x, 0, y) -> if(false, x, 0, y) [2] loop(s(x1), s(y'), y) -> if(lt(x1, y'), s(x1), s(y'), y) [2] if(false, x, c, 0) -> loop(x, s(c), 0) [2] if(false, x, c, s(x2)) -> loop(x, s(c), plus(s(c), times(x2, s(c)))) [2] if(true, x, c, y) -> y [1] The TRS has the following type information: lt :: 0:s -> 0:s -> true:false 0 :: 0:s s :: 0:s -> 0:s true :: true:false false :: true:false times :: 0:s -> 0:s -> 0:s plus :: 0:s -> 0:s -> 0:s fac :: 0:s -> 0:s loop :: 0:s -> 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s Rewrite Strategy: INNERMOST ---------------------------------------- (13) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 1 false => 0 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(x, 1 + 0, 1 + 0) :|: x >= 0, z = x if(z, z', z'', z1) -{ 1 }-> y :|: z1 = y, z' = x, c >= 0, z = 1, x >= 0, y >= 0, z'' = c if(z, z', z'', z1) -{ 2 }-> loop(x, 1 + c, plus(1 + c, times(x2, 1 + c))) :|: z' = x, c >= 0, x >= 0, z = 0, z'' = c, x2 >= 0, z1 = 1 + x2 if(z, z', z'', z1) -{ 2 }-> loop(x, 1 + c, 0) :|: z1 = 0, z' = x, c >= 0, x >= 0, z = 0, z'' = c loop(z, z', z'') -{ 2 }-> if(lt(x1, y'), 1 + x1, 1 + y', y) :|: x1 >= 0, z'' = y, y >= 0, z = 1 + x1, y' >= 0, z' = 1 + y' loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + x'', y) :|: z' = 1 + x'', z'' = y, y >= 0, x'' >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, x, 0, y) :|: z'' = y, x >= 0, y >= 0, z = x, z' = 0 lt(z, z') -{ 1 }-> lt(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x lt(z, z') -{ 1 }-> 1 :|: z' = 1 + x, x >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: x >= 0, z = x, z' = 0 plus(z, z') -{ 1 }-> y :|: y >= 0, z = 0, z' = y plus(z, z') -{ 1 }-> 1 + plus(x, y) :|: x >= 0, y >= 0, z = 1 + x, z' = y times(z, z') -{ 2 }-> plus(y, plus(y, times(x', y))) :|: x' >= 0, y >= 0, z = 1 + (1 + x'), z' = y times(z, z') -{ 2 }-> plus(y, 0) :|: z = 1 + 0, y >= 0, z' = y times(z, z') -{ 1 }-> 0 :|: y >= 0, z = 0, z' = y ---------------------------------------- (15) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(lt(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 1 }-> lt(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 }-> 1 + plus(z - 1, z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', 0) :|: z = 1 + 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 ---------------------------------------- (17) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { lt } { plus } { times } { if, loop } { fac } ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(lt(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 1 }-> lt(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 }-> 1 + plus(z - 1, z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', 0) :|: z = 1 + 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {lt}, {plus}, {times}, {if,loop}, {fac} ---------------------------------------- (19) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(lt(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 1 }-> lt(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 }-> 1 + plus(z - 1, z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', 0) :|: z = 1 + 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {lt}, {plus}, {times}, {if,loop}, {fac} ---------------------------------------- (21) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: lt 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: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(lt(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 1 }-> lt(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 }-> 1 + plus(z - 1, z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', 0) :|: z = 1 + 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {lt}, {plus}, {times}, {if,loop}, {fac} Previous analysis results are: lt: runtime: ?, size: O(1) [1] ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: lt after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(lt(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 1 }-> lt(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 }-> 1 + plus(z - 1, z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', 0) :|: z = 1 + 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {plus}, {times}, {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] ---------------------------------------- (25) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 }-> 1 + plus(z - 1, z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', 0) :|: z = 1 + 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {plus}, {times}, {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] ---------------------------------------- (27) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 }-> 1 + plus(z - 1, z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', 0) :|: z = 1 + 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {plus}, {times}, {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] plus: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 }-> 1 + plus(z - 1, z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', 0) :|: z = 1 + 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {times}, {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] plus: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] ---------------------------------------- (31) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 + z }-> 1 + s1 :|: s1 >= 0, s1 <= z - 1 + z', z - 1 >= 0, z' >= 0 times(z, z') -{ 3 + z' }-> s'' :|: s'' >= 0, s'' <= z' + 0, z = 1 + 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {times}, {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] plus: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] ---------------------------------------- (33) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: times after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2*z*z' + z' ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 + z }-> 1 + s1 :|: s1 >= 0, s1 <= z - 1 + z', z - 1 >= 0, z' >= 0 times(z, z') -{ 3 + z' }-> s'' :|: s'' >= 0, s'' <= z' + 0, z = 1 + 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {times}, {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] plus: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] times: runtime: ?, size: O(n^2) [2*z*z' + z'] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: times after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 4 + 4*z + 2*z*z' + z' ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', plus(1 + z'', times(z1 - 1, 1 + z''))) :|: z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 + z }-> 1 + s1 :|: s1 >= 0, s1 <= z - 1 + z', z - 1 >= 0, z' >= 0 times(z, z') -{ 3 + z' }-> s'' :|: s'' >= 0, s'' <= z' + 0, z = 1 + 0, z' >= 0 times(z, z') -{ 2 }-> plus(z', plus(z', times(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] plus: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] times: runtime: O(n^2) [4 + 4*z + 2*z*z' + z'], size: O(n^2) [2*z*z' + z'] ---------------------------------------- (37) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 3 + 2*z''*z1 + 6*z1 }-> loop(z', 1 + z'', s6) :|: s5 >= 0, s5 <= 1 + z'' + 2 * ((1 + z'') * (z1 - 1)), s6 >= 0, s6 <= 1 + z'' + s5, z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 + z }-> 1 + s1 :|: s1 >= 0, s1 <= z - 1 + z', z - 1 >= 0, z' >= 0 times(z, z') -{ 3 + z' }-> s'' :|: s'' >= 0, s'' <= z' + 0, z = 1 + 0, z' >= 0 times(z, z') -{ 4*z + 2*z*z' + -1*z' }-> s4 :|: s2 >= 0, s2 <= z' + 2 * (z' * (z - 2)), s3 >= 0, s3 <= z' + s2, s4 >= 0, s4 <= z' + s3, z - 2 >= 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] plus: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] times: runtime: O(n^2) [4 + 4*z + 2*z*z' + z'], size: O(n^2) [2*z*z' + z'] ---------------------------------------- (39) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: loop after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 3 + 2*z''*z1 + 6*z1 }-> loop(z', 1 + z'', s6) :|: s5 >= 0, s5 <= 1 + z'' + 2 * ((1 + z'') * (z1 - 1)), s6 >= 0, s6 <= 1 + z'' + s5, z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 + z }-> 1 + s1 :|: s1 >= 0, s1 <= z - 1 + z', z - 1 >= 0, z' >= 0 times(z, z') -{ 3 + z' }-> s'' :|: s'' >= 0, s'' <= z' + 0, z = 1 + 0, z' >= 0 times(z, z') -{ 4*z + 2*z*z' + -1*z' }-> s4 :|: s2 >= 0, s2 <= z' + 2 * (z' * (z - 2)), s3 >= 0, s3 <= z' + s2, s4 >= 0, s4 <= z' + s3, z - 2 >= 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] plus: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] times: runtime: O(n^2) [4 + 4*z + 2*z*z' + z'], size: O(n^2) [2*z*z' + z'] if: runtime: ?, size: INF loop: runtime: ?, size: INF ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(z, 1 + 0, 1 + 0) :|: z >= 0 if(z, z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 if(z, z', z'', z1) -{ 3 + 2*z''*z1 + 6*z1 }-> loop(z', 1 + z'', s6) :|: s5 >= 0, s5 <= 1 + z'' + 2 * ((1 + z'') * (z1 - 1)), s6 >= 0, s6 <= 1 + z'' + s5, z'' >= 0, z' >= 0, z = 0, z1 - 1 >= 0 if(z, z', z'', z1) -{ 2 }-> loop(z', 1 + z'', 0) :|: z1 = 0, z'' >= 0, z' >= 0, z = 0 loop(z, z', z'') -{ 3 + z' }-> if(s', 1 + (z - 1), 1 + (z' - 1), z'') :|: s' >= 0, s' <= 1, z - 1 >= 0, z'' >= 0, z' - 1 >= 0 loop(z, z', z'') -{ 2 }-> if(1, 0, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0, z = 0 loop(z, z', z'') -{ 2 }-> if(0, z, 0, z'') :|: z >= 0, z'' >= 0, z' = 0 lt(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 lt(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 plus(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 1 + z }-> 1 + s1 :|: s1 >= 0, s1 <= z - 1 + z', z - 1 >= 0, z' >= 0 times(z, z') -{ 3 + z' }-> s'' :|: s'' >= 0, s'' <= z' + 0, z = 1 + 0, z' >= 0 times(z, z') -{ 4*z + 2*z*z' + -1*z' }-> s4 :|: s2 >= 0, s2 <= z' + 2 * (z' * (z - 2)), s3 >= 0, s3 <= z' + s2, s4 >= 0, s4 <= z' + s3, z - 2 >= 0, z' >= 0 times(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 Function symbols to be analyzed: {if,loop}, {fac} Previous analysis results are: lt: runtime: O(n^1) [2 + z'], size: O(1) [1] plus: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] times: runtime: O(n^2) [4 + 4*z + 2*z*z' + z'], size: O(n^2) [2*z*z' + z'] if: runtime: INF, size: INF loop: runtime: ?, size: INF ---------------------------------------- (43) CompletionProof (UPPER BOUND(ID)) The TRS is a completely defined constructor system, as every type has a constant constructor and the following rules were added: none And the following fresh constants: none ---------------------------------------- (44) Obligation: Runtime Complexity Weighted TRS where all functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: lt(0, s(x)) -> true [1] lt(x, 0) -> false [1] lt(s(x), s(y)) -> lt(x, y) [1] times(0, y) -> 0 [1] times(s(x), y) -> plus(y, times(x, y)) [1] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] fac(x) -> loop(x, s(0), s(0)) [1] loop(x, c, y) -> if(lt(x, c), x, c, y) [1] if(false, x, c, y) -> loop(x, s(c), times(y, s(c))) [1] if(true, x, c, y) -> y [1] The TRS has the following type information: lt :: 0:s -> 0:s -> true:false 0 :: 0:s s :: 0:s -> 0:s true :: true:false false :: true:false times :: 0:s -> 0:s -> 0:s plus :: 0:s -> 0:s -> 0:s fac :: 0:s -> 0:s loop :: 0:s -> 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s Rewrite Strategy: INNERMOST ---------------------------------------- (45) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 1 false => 0 ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: fac(z) -{ 1 }-> loop(x, 1 + 0, 1 + 0) :|: x >= 0, z = x if(z, z', z'', z1) -{ 1 }-> y :|: z1 = y, z' = x, c >= 0, z = 1, x >= 0, y >= 0, z'' = c if(z, z', z'', z1) -{ 1 }-> loop(x, 1 + c, times(y, 1 + c)) :|: z1 = y, z' = x, c >= 0, x >= 0, y >= 0, z = 0, z'' = c loop(z, z', z'') -{ 1 }-> if(lt(x, c), x, c, y) :|: z'' = y, c >= 0, x >= 0, y >= 0, z' = c, z = x lt(z, z') -{ 1 }-> lt(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x lt(z, z') -{ 1 }-> 1 :|: z' = 1 + x, x >= 0, z = 0 lt(z, z') -{ 1 }-> 0 :|: x >= 0, z = x, z' = 0 plus(z, z') -{ 1 }-> y :|: y >= 0, z = 0, z' = y plus(z, z') -{ 1 }-> 1 + plus(x, y) :|: x >= 0, y >= 0, z = 1 + x, z' = y times(z, z') -{ 1 }-> plus(y, times(x, y)) :|: x >= 0, y >= 0, z = 1 + x, z' = y times(z, z') -{ 1 }-> 0 :|: y >= 0, z = 0, z' = y Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (47) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (48) Obligation: Complexity Dependency Tuples Problem Rules: lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0), s(0)) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Tuples: LT(0, s(z0)) -> c LT(z0, 0) -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0, z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0, z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0), s(0))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 S tuples: LT(0, s(z0)) -> c LT(z0, 0) -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0, z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0, z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0), s(0))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 K tuples:none Defined Rule Symbols: lt_2, times_2, plus_2, fac_1, loop_3, if_4 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, FAC_1, LOOP_3, IF_4 Compound Symbols: c, c1, c2_1, c3, c4_2, c5, c6_1, c7_1, c8_2, c9_2, c10 ---------------------------------------- (49) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: FAC(z0) -> c7(LOOP(z0, s(0), s(0))) Removed 5 trailing nodes: IF(true, z0, z1, z2) -> c10 LT(z0, 0) -> c1 PLUS(0, z0) -> c5 LT(0, s(z0)) -> c TIMES(0, z0) -> c3 ---------------------------------------- (50) Obligation: Complexity Dependency Tuples Problem Rules: lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0), s(0)) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) K tuples:none Defined Rule Symbols: lt_2, times_2, plus_2, fac_1, loop_3, if_4 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_2, c9_2 ---------------------------------------- (51) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: fac(z0) -> loop(z0, s(0), s(0)) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 ---------------------------------------- (52) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) K tuples:none Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_2, c9_2 ---------------------------------------- (53) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) by LOOP(0, s(z0), x2) -> c8(IF(true, 0, s(z0), x2), LT(0, s(z0))) LOOP(z0, 0, x2) -> c8(IF(false, z0, 0, x2), LT(z0, 0)) LOOP(s(z0), s(z1), x2) -> c8(IF(lt(z0, z1), s(z0), s(z1), x2), LT(s(z0), s(z1))) ---------------------------------------- (54) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(0, s(z0), x2) -> c8(IF(true, 0, s(z0), x2), LT(0, s(z0))) LOOP(z0, 0, x2) -> c8(IF(false, z0, 0, x2), LT(z0, 0)) LOOP(s(z0), s(z1), x2) -> c8(IF(lt(z0, z1), s(z0), s(z1), x2), LT(s(z0), s(z1))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(0, s(z0), x2) -> c8(IF(true, 0, s(z0), x2), LT(0, s(z0))) LOOP(z0, 0, x2) -> c8(IF(false, z0, 0, x2), LT(z0, 0)) LOOP(s(z0), s(z1), x2) -> c8(IF(lt(z0, z1), s(z0), s(z1), x2), LT(s(z0), s(z1))) K tuples:none Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, IF_4, LOOP_3 Compound Symbols: c2_1, c4_2, c6_1, c9_2, c8_2 ---------------------------------------- (55) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: LOOP(z0, 0, x2) -> c8(IF(false, z0, 0, x2), LT(z0, 0)) Removed 1 trailing nodes: LOOP(0, s(z0), x2) -> c8(IF(true, 0, s(z0), x2), LT(0, s(z0))) ---------------------------------------- (56) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(z0), s(z1), x2) -> c8(IF(lt(z0, z1), s(z0), s(z1), x2), LT(s(z0), s(z1))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(z0), s(z1), x2) -> c8(IF(lt(z0, z1), s(z0), s(z1), x2), LT(s(z0), s(z1))) K tuples:none Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, IF_4, LOOP_3 Compound Symbols: c2_1, c4_2, c6_1, c9_2, c8_2 ---------------------------------------- (57) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LOOP(s(z0), s(z1), x2) -> c8(IF(lt(z0, z1), s(z0), s(z1), x2), LT(s(z0), s(z1))) by LOOP(s(0), s(s(z0)), x2) -> c8(IF(true, s(0), s(s(z0)), x2), LT(s(0), s(s(z0)))) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) ---------------------------------------- (58) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(0), s(s(z0)), x2) -> c8(IF(true, s(0), s(s(z0)), x2), LT(s(0), s(s(z0)))) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(0), s(s(z0)), x2) -> c8(IF(true, s(0), s(s(z0)), x2), LT(s(0), s(s(z0)))) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) K tuples:none Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, IF_4, LOOP_3 Compound Symbols: c2_1, c4_2, c6_1, c9_2, c8_2, c8_1 ---------------------------------------- (59) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (60) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) K tuples:none Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, IF_4, LOOP_3 Compound Symbols: c2_1, c4_2, c6_1, c9_2, c8_2, c8_1 ---------------------------------------- (61) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) We considered the (Usable) Rules: lt(0, s(z0)) -> true lt(s(z0), s(z1)) -> lt(z0, z1) lt(z0, 0) -> false And the Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(IF(x_1, x_2, x_3, x_4)) = [1] + x_1 POL(LOOP(x_1, x_2, x_3)) = x_2 POL(LT(x_1, x_2)) = 0 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c2(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c6(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(c9(x_1, x_2)) = x_1 + x_2 POL(false) = 0 POL(lt(x_1, x_2)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 + x_2 POL(s(x_1)) = [1] POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = 0 ---------------------------------------- (62) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, IF_4, LOOP_3 Compound Symbols: c2_1, c4_2, c6_1, c9_2, c8_2, c8_1 ---------------------------------------- (63) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) by IF(false, s(x0), s(0), x1) -> c9(LOOP(s(x0), s(s(0)), times(x1, s(s(0)))), TIMES(x1, s(s(0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) ---------------------------------------- (64) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(x0), s(0), x1) -> c9(LOOP(s(x0), s(s(0)), times(x1, s(s(0)))), TIMES(x1, s(s(0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) IF(false, s(x0), s(0), x1) -> c9(LOOP(s(x0), s(s(0)), times(x1, s(s(0)))), TIMES(x1, s(s(0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_2, c8_1, c9_2 ---------------------------------------- (65) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: LOOP(s(z0), s(0), x2) -> c8(IF(false, s(z0), s(0), x2), LT(s(z0), s(0))) ---------------------------------------- (66) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(x0), s(0), x1) -> c9(LOOP(s(x0), s(s(0)), times(x1, s(s(0)))), TIMES(x1, s(s(0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) IF(false, s(x0), s(0), x1) -> c9(LOOP(s(x0), s(s(0)), times(x1, s(s(0)))), TIMES(x1, s(s(0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_2, c8_1, c9_2 ---------------------------------------- (67) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (68) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) IF(false, s(x0), s(0), x1) -> c(TIMES(x1, s(s(0)))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) IF(false, s(x0), s(0), x1) -> c(TIMES(x1, s(s(0)))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_2, c8_1, c9_2, c_1 ---------------------------------------- (69) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: IF(false, s(x0), s(0), x1) -> c(TIMES(x1, s(s(0)))) ---------------------------------------- (70) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_2, c8_1, c9_2, c_1 ---------------------------------------- (71) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) ---------------------------------------- (72) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_2, c8_1, c9_2, c_1 ---------------------------------------- (73) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(lt(z0, z1), s(s(z0)), s(s(z1)), x2), LT(s(s(z0)), s(s(z1)))) by LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c8(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0), LT(s(s(z0)), s(s(0)))) ---------------------------------------- (74) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c8(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0), LT(s(s(z0)), s(s(0)))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c8(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0), LT(s(s(z0)), s(s(0)))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_1, c9_2, c_1, c8_2 ---------------------------------------- (75) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (76) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0)) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0)) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_1, c9_2, c_1, c8_2, c1_1 ---------------------------------------- (77) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: LOOP(s(s(z0)), s(s(0)), y0) -> c1(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0)) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) ---------------------------------------- (78) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0)) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0)) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_1, c9_2, c_1, c8_2, c1_1 ---------------------------------------- (79) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LOOP(s(s(z0)), s(s(0)), y0) -> c1(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0)) by LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) ---------------------------------------- (80) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) S tuples: LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0)) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, LOOP_3, IF_4 Compound Symbols: c2_1, c4_2, c6_1, c8_1, c9_2, c_1, c8_2, c1_1 ---------------------------------------- (81) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LT(s(z0), s(z1)) -> c2(LT(z0, z1)) by LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) ---------------------------------------- (82) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(IF(lt(z0, 0), s(s(z0)), s(s(0)), y0)) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, PLUS_2, LOOP_3, IF_4, LT_2 Compound Symbols: c4_2, c6_1, c8_1, c9_2, c_1, c8_2, c1_1, c2_1 ---------------------------------------- (83) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LOOP(s(0), s(s(z0)), x2) -> c8(LT(s(0), s(s(z0)))) ---------------------------------------- (84) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) K tuples: LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, PLUS_2, LOOP_3, IF_4, LT_2 Compound Symbols: c4_2, c6_1, c8_1, c9_2, c_1, c8_2, c1_1, c2_1 ---------------------------------------- (85) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace LOOP(s(x0), s(x1), x2) -> c8(LT(s(x0), s(x1))) by LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) ---------------------------------------- (86) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, PLUS_2, IF_4, LOOP_3, LT_2 Compound Symbols: c4_2, c6_1, c9_2, c_1, c8_2, c1_1, c2_1, c8_1 ---------------------------------------- (87) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) by PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) ---------------------------------------- (88) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c9_2, c_1, c8_2, c1_1, c2_1, c8_1, c6_1 ---------------------------------------- (89) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace IF(false, s(s(x0)), s(s(x1)), x2) -> c9(LOOP(s(s(x0)), s(s(s(x1))), times(x2, s(s(s(x1))))), TIMES(x2, s(s(s(x1))))) by IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c9(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0))))), TIMES(x1, s(s(s(0))))) ---------------------------------------- (90) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c9(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0))))), TIMES(x1, s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c9(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0))))), TIMES(x1, s(s(s(0))))) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c8_2, c1_1, c2_1, c8_1, c6_1, c9_2 ---------------------------------------- (91) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (92) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c8_2, c1_1, c2_1, c8_1, c6_1, c9_2, c3_1 ---------------------------------------- (93) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) We considered the (Usable) Rules: lt(0, s(z0)) -> true lt(s(z0), s(z1)) -> lt(z0, z1) lt(z0, 0) -> false And the Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_1 POL(LOOP(x_1, x_2, x_3)) = x_2 POL(LT(x_1, x_2)) = 0 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c6(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(c9(x_1, x_2)) = x_1 + x_2 POL(false) = [1] POL(lt(x_1, x_2)) = [1] POL(plus(x_1, x_2)) = [1] + x_1 + x_2 POL(s(x_1)) = [1] POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = [1] ---------------------------------------- (94) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c8_2, c1_1, c2_1, c8_1, c6_1, c9_2, c3_1 ---------------------------------------- (95) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(IF(lt(x0, s(x1)), s(s(x0)), s(s(s(x1))), y0), LT(s(s(x0)), s(s(s(x1))))) by LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0), LT(s(s(x0)), s(s(s(0))))) ---------------------------------------- (96) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0), LT(s(s(x0)), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0), LT(s(s(x0)), s(s(s(0))))) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c2_1, c8_1, c6_1, c9_2, c3_1, c8_2 ---------------------------------------- (97) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (98) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c2_1, c8_1, c6_1, c9_2, c3_1, c8_2, c5_1 ---------------------------------------- (99) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) We considered the (Usable) Rules: lt(0, s(z0)) -> true lt(s(z0), s(z1)) -> lt(z0, z1) lt(z0, 0) -> false And the Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_1 + x_2 POL(LOOP(x_1, x_2, x_3)) = [1] + x_1 POL(LT(x_1, x_2)) = 0 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c5(x_1)) = x_1 POL(c6(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(c9(x_1, x_2)) = x_1 + x_2 POL(false) = [1] POL(lt(x_1, x_2)) = [1] POL(plus(x_1, x_2)) = [1] + x_1 + x_2 POL(s(x_1)) = [1] POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = [1] ---------------------------------------- (100) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c2_1, c8_1, c6_1, c9_2, c3_1, c8_2, c5_1 ---------------------------------------- (101) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace LOOP(s(s(x0)), s(s(s(x1))), y0) -> c8(LT(s(s(x0)), s(s(s(x1))))) by LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) ---------------------------------------- (102) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c2_1, c8_1, c6_1, c9_2, c3_1, c8_2, c5_1 ---------------------------------------- (103) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LT(s(s(y0)), s(s(y1))) -> c2(LT(s(y0), s(y1))) by LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) ---------------------------------------- (104) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, PLUS_2, LT_2 Compound Symbols: c4_2, c_1, c1_1, c8_1, c6_1, c9_2, c3_1, c8_2, c5_1, c2_1 ---------------------------------------- (105) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: LOOP(s(s(z0)), s(s(0)), y0) -> c1(LT(s(s(z0)), s(s(0)))) LOOP(s(x0), s(s(0)), y0) -> c8(LT(s(x0), s(s(0)))) ---------------------------------------- (106) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, PLUS_2, LT_2 Compound Symbols: c4_2, c_1, c1_1, c6_1, c9_2, c3_1, c8_2, c5_1, c8_1, c2_1 ---------------------------------------- (107) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace PLUS(s(s(y0)), z1) -> c6(PLUS(s(y0), z1)) by PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) ---------------------------------------- (108) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c9_2, c3_1, c8_2, c5_1, c8_1, c2_1, c6_1 ---------------------------------------- (109) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace IF(false, s(s(x0)), s(s(0)), x1) -> c3(TIMES(x1, s(s(s(0))))) by IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) ---------------------------------------- (110) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c9_2, c3_1, c8_2, c5_1, c8_1, c2_1, c6_1 ---------------------------------------- (111) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(LT(s(s(x0)), s(s(s(0))))) by LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) ---------------------------------------- (112) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c9_2, c3_1, c8_2, c5_1, c8_1, c2_1, c6_1 ---------------------------------------- (113) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(LT(s(s(x0)), s(s(s(s(x1)))))) by LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) ---------------------------------------- (114) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c9_2, c3_1, c8_2, c5_1, c8_1, c2_1, c6_1 ---------------------------------------- (115) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace LOOP(s(s(x0)), s(s(s(0))), y0) -> c8(LT(s(s(x0)), s(s(s(0))))) by LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c8(LT(s(s(s(y0))), s(s(s(0))))) ---------------------------------------- (116) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c8(LT(s(s(s(y0))), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c8(LT(s(s(s(y0))), s(s(s(0))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c9_2, c3_1, c8_2, c5_1, c2_1, c6_1, c8_1 ---------------------------------------- (117) CdtRuleRemovalProof (UPPER BOUND(ADD(n^3))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) We considered the (Usable) Rules:none And the Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c8(LT(s(s(s(y0))), s(s(s(0))))) The order we found is given by the following interpretation: Matrix interpretation [MATRO]: Non-tuple symbols: <<< M( s_1(x_1) ) = [[0], [0], [0]] + [[0, 1, 3], [0, 0, 1], [0, 0, 0]] * x_1 >>> <<< M( true ) = [[2], [1], [2]] >>> <<< M( plus_2(x_1, x_2) ) = [[0], [0], [0]] + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> <<< M( 0 ) = [[0], [2], [2]] >>> <<< M( lt_2(x_1, x_2) ) = [[0], [0], [0]] + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> <<< M( times_2(x_1, x_2) ) = [[0], [0], [0]] + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> <<< M( false ) = [[0], [0], [0]] >>> Tuple symbols: <<< M( c_1(x_1) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 >>> <<< M( c1_1(x_1) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 >>> <<< M( TIMES_2(x_1, x_2) ) = [[0], [0], [0]] + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> <<< M( LOOP_3(x_1, ..., x_3) ) = [[0], [2], [0]] + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_3 >>> <<< M( c8_2(x_1, x_2) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> <<< M( c8_1(x_1) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 >>> <<< M( c5_1(x_1) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 >>> <<< M( c6_1(x_1) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 >>> <<< M( IF_4(x_1, ..., x_4) ) = [[0], [0], [0]] + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_3 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_4 >>> <<< M( c9_2(x_1, x_2) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> <<< M( c2_1(x_1) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 >>> <<< M( LT_2(x_1, x_2) ) = [[0], [0], [0]] + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> <<< M( PLUS_2(x_1, x_2) ) = [[0], [0], [1]] + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[0, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> <<< M( c3_1(x_1) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 >>> <<< M( c4_2(x_1, x_2) ) = [[0], [0], [0]] + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_1 + [[1, 0, 0], [0, 0, 0], [0, 0, 0]] * x_2 >>> Matrix type: We used a basic matrix type which is not further parametrizeable. As matrix orders are CE-compatible, we used usable rules w.r.t. argument filtering in the order. ---------------------------------------- (118) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c8(LT(s(s(s(y0))), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c8(LT(s(s(s(y0))), s(s(s(0))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c9_2, c3_1, c8_2, c5_1, c2_1, c6_1, c8_1 ---------------------------------------- (119) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) ---------------------------------------- (120) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) Tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) LOOP(s(s(z0)), s(s(0)), z1) -> c1(IF(false, s(s(z0)), s(s(0)), z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c8(LT(s(s(s(y0))), s(s(s(0))))) S tuples: TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, s(s(x0)), s(s(s(x1))), x2) -> c9(LOOP(s(s(x0)), s(s(s(s(x1)))), times(x2, s(s(s(s(x1)))))), TIMES(x2, s(s(s(s(x1)))))) LOOP(s(s(x0)), s(s(s(s(x1)))), y0) -> c8(IF(lt(x0, s(s(x1))), s(s(x0)), s(s(s(s(x1)))), y0), LT(s(s(x0)), s(s(s(s(x1)))))) LT(s(s(s(y0))), s(s(s(y1)))) -> c2(LT(s(s(y0)), s(s(y1)))) PLUS(s(s(s(y0))), z1) -> c6(PLUS(s(s(y0)), z1)) K tuples: IF(false, s(x0), s(0), x1) -> c(LOOP(s(x0), s(s(0)), times(x1, s(s(0))))) IF(false, s(s(z0)), s(s(0)), s(y0)) -> c3(TIMES(s(y0), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c5(LT(s(s(s(y0))), s(s(s(0))))) LOOP(s(s(s(y0))), s(s(s(s(z1)))), z2) -> c8(LT(s(s(s(y0))), s(s(s(s(z1)))))) LOOP(s(s(s(y0))), s(s(s(0))), z1) -> c8(LT(s(s(s(y0))), s(s(s(0))))) IF(false, s(s(x0)), s(s(0)), x1) -> c3(LOOP(s(s(x0)), s(s(s(0))), times(x1, s(s(s(0)))))) LOOP(s(s(x0)), s(s(s(0))), y0) -> c5(IF(lt(x0, s(0)), s(s(x0)), s(s(s(0))), y0)) Defined Rule Symbols: times_2, plus_2, lt_2 Defined Pair Symbols: TIMES_2, IF_4, LOOP_3, LT_2, PLUS_2 Compound Symbols: c4_2, c_1, c1_1, c9_2, c3_1, c8_2, c5_1, c2_1, c6_1, c8_1