KILLED proof of input_hP6Z5hO8jG.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), 5 ms] (14) CpxRNTS (15) InliningProof [UPPER BOUND(ID), 358 ms] (16) CpxRNTS (17) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CpxRNTS (19) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (20) CpxRNTS (21) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 894 ms] (24) CpxRNTS (25) IntTrsBoundProof [UPPER BOUND(ID), 356 ms] (26) CpxRNTS (27) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 390 ms] (30) CpxRNTS (31) IntTrsBoundProof [UPPER BOUND(ID), 36 ms] (32) CpxRNTS (33) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 322 ms] (36) CpxRNTS (37) IntTrsBoundProof [UPPER BOUND(ID), 84 ms] (38) CpxRNTS (39) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 129 ms] (42) CpxRNTS (43) IntTrsBoundProof [UPPER BOUND(ID), 42 ms] (44) CpxRNTS (45) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 117 ms] (48) CpxRNTS (49) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] (50) CpxRNTS (51) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 229 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] (56) CpxRNTS (57) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 14.3 s] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 2736 ms] (62) CpxRNTS (63) CompletionProof [UPPER BOUND(ID), 0 ms] (64) CpxTypedWeightedCompleteTrs (65) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 5 ms] (66) CpxRNTS (67) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (68) CdtProblem (69) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (70) CdtProblem (71) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (72) CdtProblem (73) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (74) CdtProblem (75) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (76) CdtProblem (77) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (78) CdtProblem (79) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 7 ms] (80) CdtProblem (81) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (82) CdtProblem (83) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (84) CdtProblem (85) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (86) CdtProblem (87) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (88) CdtProblem (89) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 55 ms] (90) CdtProblem (91) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (92) CdtProblem (93) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (94) CdtProblem (95) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (96) CdtProblem (97) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 42 ms] (98) CdtProblem (99) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (100) CdtProblem (101) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (102) CdtProblem (103) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (104) CdtProblem (105) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CdtProblem (107) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CdtProblem (109) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (110) CdtProblem (111) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (112) CdtProblem (113) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 38 ms] (114) CdtProblem (115) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (116) CdtProblem (117) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (118) CdtProblem (119) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 55 ms] (120) CdtProblem (121) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (122) CdtProblem (123) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (124) CdtProblem (125) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 54 ms] (126) CdtProblem (127) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 51 ms] (128) CdtProblem (129) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 59 ms] (130) CdtProblem (131) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (132) CdtProblem (133) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (134) CdtProblem (135) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (136) CdtProblem (137) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 43 ms] (138) CdtProblem (139) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 39 ms] (140) CdtProblem (141) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (142) CdtProblem (143) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (144) CdtProblem (145) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 50 ms] (146) CdtProblem (147) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 57 ms] (148) CdtProblem (149) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (150) CdtProblem (151) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (152) CdtProblem (153) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 50 ms] (154) CdtProblem (155) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 57 ms] (156) CdtProblem (157) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (158) CdtProblem (159) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (160) CdtProblem (161) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (162) CdtProblem (163) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 67 ms] (164) CdtProblem (165) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 45 ms] (166) CdtProblem (167) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (168) CdtProblem (169) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (170) CdtProblem (171) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (172) CdtProblem (173) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (174) CdtProblem (175) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (176) CdtProblem (177) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (178) CdtProblem (179) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (180) CdtProblem (181) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (182) CdtProblem (183) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (184) CdtProblem (185) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 1 ms] (186) CdtProblem (187) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (188) CdtProblem (189) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (190) CdtProblem (191) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (194) CdtProblem (195) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (196) CdtProblem (197) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (202) CdtProblem (203) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (204) CdtProblem (205) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 9 ms] (206) CdtProblem (207) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (210) CdtProblem (211) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 23 ms] (214) CdtProblem (215) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (216) CdtProblem (217) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (218) CdtProblem (219) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 16 ms] (222) CdtProblem (223) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (224) CdtProblem (225) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) CdtProblem (227) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (228) CdtProblem (229) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (230) CdtProblem (231) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (232) CdtProblem (233) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (234) CdtProblem (235) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (236) CdtProblem (237) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (238) CdtProblem (239) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (240) CdtProblem (241) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (242) CdtProblem (243) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 44 ms] (244) CdtProblem (245) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (248) CdtProblem (249) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (250) CdtProblem (251) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (252) CdtProblem (253) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (254) CdtProblem (255) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (258) CdtProblem (259) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (260) CdtProblem (261) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (262) CdtProblem (263) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (264) CdtProblem (265) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (266) CdtProblem (267) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (268) CdtProblem (269) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (270) CdtProblem (271) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (272) 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: lcm(x, y) -> lcmIter(x, y, 0, times(x, y)) lcmIter(x, y, z, u) -> if(or(ge(0, x), ge(z, u)), x, y, z, u) if(true, x, y, z, u) -> z if(false, x, y, z, u) -> if2(divisible(z, y), x, y, z, u) if2(true, x, y, z, u) -> z if2(false, x, y, z, u) -> lcmIter(x, y, plus(x, z), u) plus(0, y) -> y plus(s(x), y) -> s(plus(x, y)) times(x, y) -> ifTimes(ge(0, x), x, y) ifTimes(true, x, y) -> 0 ifTimes(false, x, y) -> plus(y, times(y, p(x))) p(s(x)) -> x p(0) -> s(s(0)) ge(x, 0) -> true ge(0, s(y)) -> false ge(s(x), s(y)) -> ge(x, y) or(true, y) -> true or(false, y) -> y divisible(0, s(y)) -> true divisible(s(x), s(y)) -> div(s(x), s(y), s(y)) div(x, y, 0) -> divisible(x, y) div(0, y, s(z)) -> false div(s(x), y, s(z)) -> div(x, y, z) a -> b a -> c 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: lcm(x, y) -> lcmIter(x, y, 0', times(x, y)) lcmIter(x, y, z, u) -> if(or(ge(0', x), ge(z, u)), x, y, z, u) if(true, x, y, z, u) -> z if(false, x, y, z, u) -> if2(divisible(z, y), x, y, z, u) if2(true, x, y, z, u) -> z if2(false, x, y, z, u) -> lcmIter(x, y, plus(x, z), u) plus(0', y) -> y plus(s(x), y) -> s(plus(x, y)) times(x, y) -> ifTimes(ge(0', x), x, y) ifTimes(true, x, y) -> 0' ifTimes(false, x, y) -> plus(y, times(y, p(x))) p(s(x)) -> x p(0') -> s(s(0')) ge(x, 0') -> true ge(0', s(y)) -> false ge(s(x), s(y)) -> ge(x, y) or(true, y) -> true or(false, y) -> y divisible(0', s(y)) -> true divisible(s(x), s(y)) -> div(s(x), s(y), s(y)) div(x, y, 0') -> divisible(x, y) div(0', y, s(z)) -> false div(s(x), y, s(z)) -> div(x, y, z) a -> b a -> c 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: lcm(x, y) -> lcmIter(x, y, 0, times(x, y)) lcmIter(x, y, z, u) -> if(or(ge(0, x), ge(z, u)), x, y, z, u) if(true, x, y, z, u) -> z if(false, x, y, z, u) -> if2(divisible(z, y), x, y, z, u) if2(true, x, y, z, u) -> z if2(false, x, y, z, u) -> lcmIter(x, y, plus(x, z), u) plus(0, y) -> y plus(s(x), y) -> s(plus(x, y)) times(x, y) -> ifTimes(ge(0, x), x, y) ifTimes(true, x, y) -> 0 ifTimes(false, x, y) -> plus(y, times(y, p(x))) p(s(x)) -> x p(0) -> s(s(0)) ge(x, 0) -> true ge(0, s(y)) -> false ge(s(x), s(y)) -> ge(x, y) or(true, y) -> true or(false, y) -> y divisible(0, s(y)) -> true divisible(s(x), s(y)) -> div(s(x), s(y), s(y)) div(x, y, 0) -> divisible(x, y) div(0, y, s(z)) -> false div(s(x), y, s(z)) -> div(x, y, z) a -> b a -> c 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: lcm(x, y) -> lcmIter(x, y, 0, times(x, y)) [1] lcmIter(x, y, z, u) -> if(or(ge(0, x), ge(z, u)), x, y, z, u) [1] if(true, x, y, z, u) -> z [1] if(false, x, y, z, u) -> if2(divisible(z, y), x, y, z, u) [1] if2(true, x, y, z, u) -> z [1] if2(false, x, y, z, u) -> lcmIter(x, y, plus(x, z), u) [1] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] times(x, y) -> ifTimes(ge(0, x), x, y) [1] ifTimes(true, x, y) -> 0 [1] ifTimes(false, x, y) -> plus(y, times(y, p(x))) [1] p(s(x)) -> x [1] p(0) -> s(s(0)) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] divisible(0, s(y)) -> true [1] divisible(s(x), s(y)) -> div(s(x), s(y), s(y)) [1] div(x, y, 0) -> divisible(x, y) [1] div(0, y, s(z)) -> false [1] div(s(x), y, s(z)) -> div(x, y, z) [1] a -> b [1] a -> c [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: lcm(x, y) -> lcmIter(x, y, 0, times(x, y)) [1] lcmIter(x, y, z, u) -> if(or(ge(0, x), ge(z, u)), x, y, z, u) [1] if(true, x, y, z, u) -> z [1] if(false, x, y, z, u) -> if2(divisible(z, y), x, y, z, u) [1] if2(true, x, y, z, u) -> z [1] if2(false, x, y, z, u) -> lcmIter(x, y, plus(x, z), u) [1] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] times(x, y) -> ifTimes(ge(0, x), x, y) [1] ifTimes(true, x, y) -> 0 [1] ifTimes(false, x, y) -> plus(y, times(y, p(x))) [1] p(s(x)) -> x [1] p(0) -> s(s(0)) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] divisible(0, s(y)) -> true [1] divisible(s(x), s(y)) -> div(s(x), s(y), s(y)) [1] div(x, y, 0) -> divisible(x, y) [1] div(0, y, s(z)) -> false [1] div(s(x), y, s(z)) -> div(x, y, z) [1] a -> b [1] a -> c [1] The TRS has the following type information: lcm :: 0:s -> 0:s -> 0:s lcmIter :: 0:s -> 0:s -> 0:s -> 0:s -> 0:s 0 :: 0:s times :: 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s -> 0:s or :: true:false -> true:false -> true:false ge :: 0:s -> 0:s -> true:false true :: true:false false :: true:false if2 :: true:false -> 0:s -> 0:s -> 0:s -> 0:s -> 0:s divisible :: 0:s -> 0:s -> true:false plus :: 0:s -> 0:s -> 0:s s :: 0:s -> 0:s ifTimes :: true:false -> 0:s -> 0:s -> 0:s p :: 0:s -> 0:s div :: 0:s -> 0:s -> 0:s -> true:false a :: b:c b :: b:c c :: b:c 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: lcm_2 lcmIter_4 if_5 if2_5 a (c) The following functions are completely defined: times_2 divisible_2 plus_2 or_2 ge_2 p_1 div_3 ifTimes_3 Due to the following rules being added: divisible(v0, v1) -> null_divisible [0] or(v0, v1) -> null_or [0] ifTimes(v0, v1, v2) -> 0 [0] And the following fresh constants: null_divisible, null_or ---------------------------------------- (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: lcm(x, y) -> lcmIter(x, y, 0, times(x, y)) [1] lcmIter(x, y, z, u) -> if(or(ge(0, x), ge(z, u)), x, y, z, u) [1] if(true, x, y, z, u) -> z [1] if(false, x, y, z, u) -> if2(divisible(z, y), x, y, z, u) [1] if2(true, x, y, z, u) -> z [1] if2(false, x, y, z, u) -> lcmIter(x, y, plus(x, z), u) [1] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] times(x, y) -> ifTimes(ge(0, x), x, y) [1] ifTimes(true, x, y) -> 0 [1] ifTimes(false, x, y) -> plus(y, times(y, p(x))) [1] p(s(x)) -> x [1] p(0) -> s(s(0)) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] divisible(0, s(y)) -> true [1] divisible(s(x), s(y)) -> div(s(x), s(y), s(y)) [1] div(x, y, 0) -> divisible(x, y) [1] div(0, y, s(z)) -> false [1] div(s(x), y, s(z)) -> div(x, y, z) [1] a -> b [1] a -> c [1] divisible(v0, v1) -> null_divisible [0] or(v0, v1) -> null_or [0] ifTimes(v0, v1, v2) -> 0 [0] The TRS has the following type information: lcm :: 0:s -> 0:s -> 0:s lcmIter :: 0:s -> 0:s -> 0:s -> 0:s -> 0:s 0 :: 0:s times :: 0:s -> 0:s -> 0:s if :: true:false:null_divisible:null_or -> 0:s -> 0:s -> 0:s -> 0:s -> 0:s or :: true:false:null_divisible:null_or -> true:false:null_divisible:null_or -> true:false:null_divisible:null_or ge :: 0:s -> 0:s -> true:false:null_divisible:null_or true :: true:false:null_divisible:null_or false :: true:false:null_divisible:null_or if2 :: true:false:null_divisible:null_or -> 0:s -> 0:s -> 0:s -> 0:s -> 0:s divisible :: 0:s -> 0:s -> true:false:null_divisible:null_or plus :: 0:s -> 0:s -> 0:s s :: 0:s -> 0:s ifTimes :: true:false:null_divisible:null_or -> 0:s -> 0:s -> 0:s p :: 0:s -> 0:s div :: 0:s -> 0:s -> 0:s -> true:false:null_divisible:null_or a :: b:c b :: b:c c :: b:c null_divisible :: true:false:null_divisible:null_or null_or :: true:false:null_divisible:null_or 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: lcm(x, y) -> lcmIter(x, y, 0, ifTimes(ge(0, x), x, y)) [2] lcmIter(0, y, z, 0) -> if(or(true, true), 0, y, z, 0) [3] lcmIter(0, y, 0, s(y'')) -> if(or(true, false), 0, y, 0, s(y'')) [3] lcmIter(0, y, s(x'), s(y1)) -> if(or(true, ge(x', y1)), 0, y, s(x'), s(y1)) [3] lcmIter(s(y'), y, z, 0) -> if(or(false, true), s(y'), y, z, 0) [3] lcmIter(s(y'), y, 0, s(y2)) -> if(or(false, false), s(y'), y, 0, s(y2)) [3] lcmIter(s(y'), y, s(x''), s(y3)) -> if(or(false, ge(x'', y3)), s(y'), y, s(x''), s(y3)) [3] if(true, x, y, z, u) -> z [1] if(false, x, s(y4), 0, u) -> if2(true, x, s(y4), 0, u) [2] if(false, x, s(y5), s(x1), u) -> if2(div(s(x1), s(y5), s(y5)), x, s(y5), s(x1), u) [2] if(false, x, y, z, u) -> if2(null_divisible, x, y, z, u) [1] if2(true, x, y, z, u) -> z [1] if2(false, 0, y, z, u) -> lcmIter(0, y, z, u) [2] if2(false, s(x2), y, z, u) -> lcmIter(s(x2), y, s(plus(x2, z)), u) [2] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] times(0, y) -> ifTimes(true, 0, y) [2] times(s(y6), y) -> ifTimes(false, s(y6), y) [2] ifTimes(true, x, y) -> 0 [1] ifTimes(false, s(x3), y) -> plus(y, times(y, x3)) [2] ifTimes(false, 0, y) -> plus(y, times(y, s(s(0)))) [2] p(s(x)) -> x [1] p(0) -> s(s(0)) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] divisible(0, s(y)) -> true [1] divisible(s(x), s(y)) -> div(s(x), s(y), s(y)) [1] div(x, y, 0) -> divisible(x, y) [1] div(0, y, s(z)) -> false [1] div(s(x), y, s(z)) -> div(x, y, z) [1] a -> b [1] a -> c [1] divisible(v0, v1) -> null_divisible [0] or(v0, v1) -> null_or [0] ifTimes(v0, v1, v2) -> 0 [0] The TRS has the following type information: lcm :: 0:s -> 0:s -> 0:s lcmIter :: 0:s -> 0:s -> 0:s -> 0:s -> 0:s 0 :: 0:s times :: 0:s -> 0:s -> 0:s if :: true:false:null_divisible:null_or -> 0:s -> 0:s -> 0:s -> 0:s -> 0:s or :: true:false:null_divisible:null_or -> true:false:null_divisible:null_or -> true:false:null_divisible:null_or ge :: 0:s -> 0:s -> true:false:null_divisible:null_or true :: true:false:null_divisible:null_or false :: true:false:null_divisible:null_or if2 :: true:false:null_divisible:null_or -> 0:s -> 0:s -> 0:s -> 0:s -> 0:s divisible :: 0:s -> 0:s -> true:false:null_divisible:null_or plus :: 0:s -> 0:s -> 0:s s :: 0:s -> 0:s ifTimes :: true:false:null_divisible:null_or -> 0:s -> 0:s -> 0:s p :: 0:s -> 0:s div :: 0:s -> 0:s -> 0:s -> true:false:null_divisible:null_or a :: b:c b :: b:c c :: b:c null_divisible :: true:false:null_divisible:null_or null_or :: true:false:null_divisible:null_or 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 => 2 false => 1 b => 0 c => 1 null_divisible => 0 null_or => 0 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 1 }-> divisible(x, y) :|: z1 = 0, z' = x, z'' = y, x >= 0, y >= 0 div(z', z'', z1) -{ 1 }-> div(x, y, z) :|: z' = 1 + x, z >= 0, z'' = y, x >= 0, y >= 0, z1 = 1 + z div(z', z'', z1) -{ 1 }-> 1 :|: z >= 0, z'' = y, y >= 0, z1 = 1 + z, z' = 0 divisible(z', z'') -{ 1 }-> div(1 + x, 1 + y, 1 + y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y divisible(z', z'') -{ 1 }-> 2 :|: y >= 0, z'' = 1 + y, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 ge(z', z'') -{ 1 }-> ge(x, y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' = x, x >= 0 ge(z', z'') -{ 1 }-> 1 :|: y >= 0, z'' = 1 + y, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x, z3 = u, u >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(div(1 + x1, 1 + y5, 1 + y5), x, 1 + y5, 1 + x1, u) :|: z1 = 1 + y5, y5 >= 0, x1 >= 0, x >= 0, z'' = x, z2 = 1 + x1, z' = 1, z3 = u, u >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, x, 1 + y4, 0, u) :|: z2 = 0, x >= 0, z1 = 1 + y4, z'' = x, z' = 1, y4 >= 0, z3 = u, u >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, x, y, z, u) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1, z3 = u, u >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x, z3 = u, u >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, y, z, u) :|: z'' = 0, z1 = y, z >= 0, z2 = z, y >= 0, z' = 1, z3 = u, u >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + x2, y, 1 + plus(x2, z), u) :|: z1 = y, z >= 0, z2 = z, y >= 0, z'' = 1 + x2, z' = 1, z3 = u, x2 >= 0, u >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(y, times(y, x3)) :|: z1 = y, z'' = 1 + x3, y >= 0, z' = 1, x3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(y, times(y, 1 + (1 + 0))) :|: z'' = 0, z1 = y, y >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z1 = y, z' = 2, x >= 0, y >= 0, z'' = x ifTimes(z', z'', z1) -{ 0 }-> 0 :|: v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, z' = v0 lcm(z', z'') -{ 2 }-> lcmIter(x, y, 0, ifTimes(ge(0, x), x, y)) :|: z' = x, z'' = y, x >= 0, y >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(x', y1)), 0, y, 1 + x', 1 + y1) :|: y1 >= 0, z2 = 1 + y1, z'' = y, y >= 0, x' >= 0, z1 = 1 + x', z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, 2), 0, y, z, 0) :|: z1 = z, z >= 0, z'' = y, z2 = 0, y >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, 1), 0, y, 0, 1 + y'') :|: z2 = 1 + y'', z1 = 0, z'' = y, y >= 0, y'' >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(x'', y3)), 1 + y', y, 1 + x'', 1 + y3) :|: z1 = 1 + x'', z2 = 1 + y3, z'' = y, y >= 0, y' >= 0, y3 >= 0, z' = 1 + y', x'' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, 2), 1 + y', y, z, 0) :|: z1 = z, z >= 0, z'' = y, z2 = 0, y >= 0, y' >= 0, z' = 1 + y' lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, 1), 1 + y', y, 0, 1 + y2) :|: z1 = 0, z2 = 1 + y2, z'' = y, y >= 0, y' >= 0, z' = 1 + y', y2 >= 0 or(z', z'') -{ 1 }-> y :|: z'' = y, y >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' = y, y >= 0 or(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 p(z') -{ 1 }-> x :|: z' = 1 + x, x >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> y :|: z'' = y, y >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(x, y) :|: z' = 1 + x, z'' = y, x >= 0, y >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, y) :|: z'' = y, y >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + y6, y) :|: z'' = y, y >= 0, y6 >= 0, z' = 1 + y6 ---------------------------------------- (15) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: or(z', z'') -{ 1 }-> y :|: z'' = y, y >= 0, z' = 1 or(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' = y, y >= 0 ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 1 }-> divisible(x, y) :|: z1 = 0, z' = x, z'' = y, x >= 0, y >= 0 div(z', z'', z1) -{ 1 }-> div(x, y, z) :|: z' = 1 + x, z >= 0, z'' = y, x >= 0, y >= 0, z1 = 1 + z div(z', z'', z1) -{ 1 }-> 1 :|: z >= 0, z'' = y, y >= 0, z1 = 1 + z, z' = 0 divisible(z', z'') -{ 1 }-> div(1 + x, 1 + y, 1 + y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y divisible(z', z'') -{ 1 }-> 2 :|: y >= 0, z'' = 1 + y, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 ge(z', z'') -{ 1 }-> ge(x, y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' = x, x >= 0 ge(z', z'') -{ 1 }-> 1 :|: y >= 0, z'' = 1 + y, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x, z3 = u, u >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(div(1 + x1, 1 + y5, 1 + y5), x, 1 + y5, 1 + x1, u) :|: z1 = 1 + y5, y5 >= 0, x1 >= 0, x >= 0, z'' = x, z2 = 1 + x1, z' = 1, z3 = u, u >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, x, 1 + y4, 0, u) :|: z2 = 0, x >= 0, z1 = 1 + y4, z'' = x, z' = 1, y4 >= 0, z3 = u, u >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, x, y, z, u) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1, z3 = u, u >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x, z3 = u, u >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, y, z, u) :|: z'' = 0, z1 = y, z >= 0, z2 = z, y >= 0, z' = 1, z3 = u, u >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + x2, y, 1 + plus(x2, z), u) :|: z1 = y, z >= 0, z2 = z, y >= 0, z'' = 1 + x2, z' = 1, z3 = u, x2 >= 0, u >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(y, times(y, x3)) :|: z1 = y, z'' = 1 + x3, y >= 0, z' = 1, x3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(y, times(y, 1 + (1 + 0))) :|: z'' = 0, z1 = y, y >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z1 = y, z' = 2, x >= 0, y >= 0, z'' = x ifTimes(z', z'', z1) -{ 0 }-> 0 :|: v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, z' = v0 lcm(z', z'') -{ 2 }-> lcmIter(x, y, 0, ifTimes(ge(0, x), x, y)) :|: z' = x, z'' = y, x >= 0, y >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + y', y, z, 0) :|: z1 = z, z >= 0, z'' = y, z2 = 0, y >= 0, y' >= 0, z' = 1 + y', 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + y', y, 0, 1 + y2) :|: z1 = 0, z2 = 1 + y2, z'' = y, y >= 0, y' >= 0, z' = 1 + y', y2 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(x', y1)), 0, y, 1 + x', 1 + y1) :|: y1 >= 0, z2 = 1 + y1, z'' = y, y >= 0, x' >= 0, z1 = 1 + x', z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(x'', y3)), 1 + y', y, 1 + x'', 1 + y3) :|: z1 = 1 + x'', z2 = 1 + y3, z'' = y, y >= 0, y' >= 0, y3 >= 0, z' = 1 + y', x'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, y, z, 0) :|: z1 = z, z >= 0, z'' = y, z2 = 0, y >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, y, 0, 1 + y'') :|: z2 = 1 + y'', z1 = 0, z'' = y, y >= 0, y'' >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, y, z, 0) :|: z1 = z, z >= 0, z'' = y, z2 = 0, y >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, y, 0, 1 + y'') :|: z2 = 1 + y'', z1 = 0, z'' = y, y >= 0, y'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + y', y, z, 0) :|: z1 = z, z >= 0, z'' = y, z2 = 0, y >= 0, y' >= 0, z' = 1 + y', v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + y', y, 0, 1 + y2) :|: z1 = 0, z2 = 1 + y2, z'' = y, y >= 0, y' >= 0, z' = 1 + y', y2 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> y :|: z'' = y, y >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' = y, y >= 0 or(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 p(z') -{ 1 }-> x :|: z' = 1 + x, x >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> y :|: z'' = y, y >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(x, y) :|: z' = 1 + x, z'' = y, x >= 0, y >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, y) :|: z'' = y, y >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + y6, y) :|: z'' = y, y >= 0, y6 >= 0, z' = 1 + y6 ---------------------------------------- (17) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 1 }-> divisible(z', z'') :|: z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> div(z' - 1, z'', z1 - 1) :|: z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 1 }-> div(1 + (z' - 1), 1 + (z'' - 1), 1 + (z'' - 1)) :|: z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(div(1 + (z2 - 1), 1 + (z1 - 1), 1 + (z1 - 1)), z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 2 }-> lcmIter(z', z'', 0, ifTimes(ge(0, z'), z', z'')) :|: z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(z1 - 1, z2 - 1)), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(z1 - 1, z2 - 1)), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 ---------------------------------------- (19) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { div, divisible } { ge } { plus } { p } { a } { or } { if2, if, lcmIter } { ifTimes, times } { lcm } ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 1 }-> divisible(z', z'') :|: z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> div(z' - 1, z'', z1 - 1) :|: z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 1 }-> div(1 + (z' - 1), 1 + (z'' - 1), 1 + (z'' - 1)) :|: z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(div(1 + (z2 - 1), 1 + (z1 - 1), 1 + (z1 - 1)), z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 2 }-> lcmIter(z', z'', 0, ifTimes(ge(0, z'), z', z'')) :|: z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(z1 - 1, z2 - 1)), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(z1 - 1, z2 - 1)), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {div,divisible}, {ge}, {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} ---------------------------------------- (21) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 1 }-> divisible(z', z'') :|: z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> div(z' - 1, z'', z1 - 1) :|: z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 1 }-> div(1 + (z' - 1), 1 + (z'' - 1), 1 + (z'' - 1)) :|: z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(div(1 + (z2 - 1), 1 + (z1 - 1), 1 + (z1 - 1)), z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 2 }-> lcmIter(z', z'', 0, ifTimes(ge(0, z'), z', z'')) :|: z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(z1 - 1, z2 - 1)), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(z1 - 1, z2 - 1)), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {div,divisible}, {ge}, {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: div after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 Computed SIZE bound using CoFloCo for: divisible after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 1 }-> divisible(z', z'') :|: z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> div(z' - 1, z'', z1 - 1) :|: z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 1 }-> div(1 + (z' - 1), 1 + (z'' - 1), 1 + (z'' - 1)) :|: z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(div(1 + (z2 - 1), 1 + (z1 - 1), 1 + (z1 - 1)), z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 2 }-> lcmIter(z', z'', 0, ifTimes(ge(0, z'), z', z'')) :|: z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(z1 - 1, z2 - 1)), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(z1 - 1, z2 - 1)), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {div,divisible}, {ge}, {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: ?, size: O(1) [2] divisible: runtime: ?, size: O(1) [2] ---------------------------------------- (25) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: div after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + 3*z' Computed RUNTIME bound using CoFloCo for: divisible after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 5 + 3*z' ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 1 }-> divisible(z', z'') :|: z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> div(z' - 1, z'', z1 - 1) :|: z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 1 }-> div(1 + (z' - 1), 1 + (z'' - 1), 1 + (z'' - 1)) :|: z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(div(1 + (z2 - 1), 1 + (z1 - 1), 1 + (z1 - 1)), z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 2 }-> lcmIter(z', z'', 0, ifTimes(ge(0, z'), z', z'')) :|: z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(z1 - 1, z2 - 1)), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(z1 - 1, z2 - 1)), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {ge}, {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ---------------------------------------- (27) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 2 }-> lcmIter(z', z'', 0, ifTimes(ge(0, z'), z', z'')) :|: z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(z1 - 1, z2 - 1)), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(z1 - 1, z2 - 1)), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {ge}, {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: ge after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 2 }-> lcmIter(z', z'', 0, ifTimes(ge(0, z'), z', z'')) :|: z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(z1 - 1, z2 - 1)), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(z1 - 1, z2 - 1)), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {ge}, {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: ?, size: O(1) [2] ---------------------------------------- (31) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: ge after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z'' ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 2 }-> lcmIter(z', z'', 0, ifTimes(ge(0, z'), z', z'')) :|: z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(2, ge(z1 - 1, z2 - 1)), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(or(1, ge(z1 - 1, z2 - 1)), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] ---------------------------------------- (33) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] ---------------------------------------- (35) 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'' ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {plus}, {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: ?, size: O(n^1) [z' + z''] ---------------------------------------- (37) 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' ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(1 + (z'' - 1), z1, 1 + plus(z'' - 1, z2), z3) :|: z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 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 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] ---------------------------------------- (39) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: p after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {p}, {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: ?, size: O(n^1) [2 + z'] ---------------------------------------- (43) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: p after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] ---------------------------------------- (45) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: a after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {a}, {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] a: runtime: ?, size: O(1) [1] ---------------------------------------- (49) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: a after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (51) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: or after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z'' ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {or}, {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] or: runtime: ?, size: O(n^1) [2 + z''] ---------------------------------------- (55) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: or after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(2, s4), 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 4 + z2 }-> if(or(1, s5), 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] or: runtime: O(1) [1], size: O(n^1) [2 + z''] ---------------------------------------- (57) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 5 + z2 }-> if(s8, 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s8 >= 0, s8 <= s4 + 2, s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 5 + z2 }-> if(s9, 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s9 >= 0, s9 <= s5 + 2, s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] or: runtime: O(1) [1], size: O(n^1) [2 + z''] ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: if2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? 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: lcmIter after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 5 + z2 }-> if(s8, 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s8 >= 0, s8 <= s4 + 2, s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 5 + z2 }-> if(s9, 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s9 >= 0, s9 <= s5 + 2, s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] or: runtime: O(1) [1], size: O(n^1) [2 + z''] if2: runtime: ?, size: INF if: runtime: ?, size: INF lcmIter: runtime: ?, size: INF ---------------------------------------- (61) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: if2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 6 + 3*z' }-> s'' :|: s'' >= 0, s'' <= 2, z1 = 0, z' >= 0, z'' >= 0 div(z', z'', z1) -{ 2 + 3*z' }-> s1 :|: s1 >= 0, s1 <= 2, z1 - 1 >= 0, z' - 1 >= 0, z'' >= 0 div(z', z'', z1) -{ 1 }-> 1 :|: z1 - 1 >= 0, z'' >= 0, z' = 0 divisible(z', z'') -{ 5 + 3*z' }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z'' - 1 >= 0 divisible(z', z'') -{ 1 }-> 2 :|: z'' - 1 >= 0, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 ge(z', z'') -{ 2 + z'' }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 if(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 6 + 3*z2 }-> if2(s, z'', 1 + (z1 - 1), 1 + (z2 - 1), z3) :|: s >= 0, s <= 2, z1 - 1 >= 0, z2 - 1 >= 0, z'' >= 0, z' = 1, z3 >= 0 if(z', z'', z1, z2, z3) -{ 2 }-> if2(2, z'', 1 + (z1 - 1), 0, z3) :|: z2 = 0, z'' >= 0, z' = 1, z1 - 1 >= 0, z3 >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(0, z'', z1, z2, z3) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 }-> lcmIter(0, z1, z2, z3) :|: z'' = 0, z2 >= 0, z1 >= 0, z' = 1, z3 >= 0 if2(z', z'', z1, z2, z3) -{ 2 + z'' }-> lcmIter(1 + (z'' - 1), z1, 1 + s6, z3) :|: s6 >= 0, s6 <= z'' - 1 + z2, z2 >= 0, z1 >= 0, z' = 1, z'' - 1 >= 0, z3 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, z'' - 1)) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifTimes(z', z'', z1) -{ 2 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z'' = 0, z1 >= 0, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z' = 2, z'' >= 0, z1 >= 0 ifTimes(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 lcm(z', z'') -{ 4 + z' }-> lcmIter(z', z'', 0, ifTimes(s2, z', z'')) :|: s2 >= 0, s2 <= 2, z' >= 0, z'' >= 0 lcmIter(z', z'', z1, z2) -{ 5 + z2 }-> if(s8, 0, z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s8 >= 0, s8 <= s4 + 2, s4 >= 0, s4 <= 2, z2 - 1 >= 0, z'' >= 0, z1 - 1 >= 0, z' = 0 lcmIter(z', z'', z1, z2) -{ 5 + z2 }-> if(s9, 1 + (z' - 1), z'', 1 + (z1 - 1), 1 + (z2 - 1)) :|: s9 >= 0, s9 <= s5 + 2, s5 >= 0, s5 <= 2, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, z1 - 1 >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, 2 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(y'', 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, 1 = y'', y'' >= 0, 1 = 1 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, 2 = 2, 2 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 4 }-> if(2, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, 2 = 2, 1 = y', y' >= 0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' = 0, v0 >= 0, v1 >= 0, 2 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 0, z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z2 - 1 >= 0, z' = 0, v0 >= 0, v1 >= 0, 1 = v1, 2 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', z1, 0) :|: z1 >= 0, z2 = 0, z'' >= 0, z' - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v1, 1 = v0 lcmIter(z', z'', z1, z2) -{ 3 }-> if(0, 1 + (z' - 1), z'', 0, 1 + (z2 - 1)) :|: z1 = 0, z'' >= 0, z' - 1 >= 0, z2 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v1, 1 = v0 or(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' >= 0 or(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s7 :|: s7 >= 0, s7 <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> ifTimes(2, 0, z'') :|: z'' >= 0, z' = 0 times(z', z'') -{ 2 }-> ifTimes(1, 1 + (z' - 1), z'') :|: z'' >= 0, z' - 1 >= 0 Function symbols to be analyzed: {if2,if,lcmIter}, {ifTimes,times}, {lcm} Previous analysis results are: div: runtime: O(n^1) [4 + 3*z'], size: O(1) [2] divisible: runtime: O(n^1) [5 + 3*z'], size: O(1) [2] ge: runtime: O(n^1) [2 + z''], size: O(1) [2] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] or: runtime: O(1) [1], size: O(n^1) [2 + z''] if2: runtime: INF, size: INF if: runtime: ?, size: INF lcmIter: runtime: ?, size: INF ---------------------------------------- (63) 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: divisible(v0, v1) -> null_divisible [0] if(v0, v1, v2, v3, v4) -> null_if [0] if2(v0, v1, v2, v3, v4) -> null_if2 [0] ifTimes(v0, v1, v2) -> null_ifTimes [0] or(v0, v1) -> null_or [0] plus(v0, v1) -> null_plus [0] p(v0) -> null_p [0] ge(v0, v1) -> null_ge [0] div(v0, v1, v2) -> null_div [0] And the following fresh constants: null_divisible, null_if, null_if2, null_ifTimes, null_or, null_plus, null_p, null_ge, null_div ---------------------------------------- (64) 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: lcm(x, y) -> lcmIter(x, y, 0, times(x, y)) [1] lcmIter(x, y, z, u) -> if(or(ge(0, x), ge(z, u)), x, y, z, u) [1] if(true, x, y, z, u) -> z [1] if(false, x, y, z, u) -> if2(divisible(z, y), x, y, z, u) [1] if2(true, x, y, z, u) -> z [1] if2(false, x, y, z, u) -> lcmIter(x, y, plus(x, z), u) [1] plus(0, y) -> y [1] plus(s(x), y) -> s(plus(x, y)) [1] times(x, y) -> ifTimes(ge(0, x), x, y) [1] ifTimes(true, x, y) -> 0 [1] ifTimes(false, x, y) -> plus(y, times(y, p(x))) [1] p(s(x)) -> x [1] p(0) -> s(s(0)) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] divisible(0, s(y)) -> true [1] divisible(s(x), s(y)) -> div(s(x), s(y), s(y)) [1] div(x, y, 0) -> divisible(x, y) [1] div(0, y, s(z)) -> false [1] div(s(x), y, s(z)) -> div(x, y, z) [1] a -> b [1] a -> c [1] divisible(v0, v1) -> null_divisible [0] if(v0, v1, v2, v3, v4) -> null_if [0] if2(v0, v1, v2, v3, v4) -> null_if2 [0] ifTimes(v0, v1, v2) -> null_ifTimes [0] or(v0, v1) -> null_or [0] plus(v0, v1) -> null_plus [0] p(v0) -> null_p [0] ge(v0, v1) -> null_ge [0] div(v0, v1, v2) -> null_div [0] The TRS has the following type information: lcm :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p lcmIter :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p 0 :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p times :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p if :: true:false:null_divisible:null_or:null_ge:null_div -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p or :: true:false:null_divisible:null_or:null_ge:null_div -> true:false:null_divisible:null_or:null_ge:null_div -> true:false:null_divisible:null_or:null_ge:null_div ge :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> true:false:null_divisible:null_or:null_ge:null_div true :: true:false:null_divisible:null_or:null_ge:null_div false :: true:false:null_divisible:null_or:null_ge:null_div if2 :: true:false:null_divisible:null_or:null_ge:null_div -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p divisible :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> true:false:null_divisible:null_or:null_ge:null_div plus :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p s :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p ifTimes :: true:false:null_divisible:null_or:null_ge:null_div -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p p :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p div :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p -> true:false:null_divisible:null_or:null_ge:null_div a :: b:c b :: b:c c :: b:c null_divisible :: true:false:null_divisible:null_or:null_ge:null_div null_if :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p null_if2 :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p null_ifTimes :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p null_or :: true:false:null_divisible:null_or:null_ge:null_div null_plus :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p null_p :: 0:s:null_if:null_if2:null_ifTimes:null_plus:null_p null_ge :: true:false:null_divisible:null_or:null_ge:null_div null_div :: true:false:null_divisible:null_or:null_ge:null_div Rewrite Strategy: INNERMOST ---------------------------------------- (65) 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 => 2 false => 1 b => 0 c => 1 null_divisible => 0 null_if => 0 null_if2 => 0 null_ifTimes => 0 null_or => 0 null_plus => 0 null_p => 0 null_ge => 0 null_div => 0 ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: div(z', z'', z1) -{ 1 }-> divisible(x, y) :|: z1 = 0, z' = x, z'' = y, x >= 0, y >= 0 div(z', z'', z1) -{ 1 }-> div(x, y, z) :|: z' = 1 + x, z >= 0, z'' = y, x >= 0, y >= 0, z1 = 1 + z div(z', z'', z1) -{ 1 }-> 1 :|: z >= 0, z'' = y, y >= 0, z1 = 1 + z, z' = 0 div(z', z'', z1) -{ 0 }-> 0 :|: v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, z' = v0 divisible(z', z'') -{ 1 }-> div(1 + x, 1 + y, 1 + y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y divisible(z', z'') -{ 1 }-> 2 :|: y >= 0, z'' = 1 + y, z' = 0 divisible(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 ge(z', z'') -{ 1 }-> ge(x, y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' = x, x >= 0 ge(z', z'') -{ 1 }-> 1 :|: y >= 0, z'' = 1 + y, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 if(z', z'', z1, z2, z3) -{ 1 }-> z :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x, z3 = u, u >= 0 if(z', z'', z1, z2, z3) -{ 1 }-> if2(divisible(z, y), x, y, z, u) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1, z3 = u, u >= 0 if(z', z'', z1, z2, z3) -{ 0 }-> 0 :|: z2 = v3, v0 >= 0, v4 >= 0, z1 = v2, v1 >= 0, z'' = v1, z3 = v4, v2 >= 0, v3 >= 0, z' = v0 if2(z', z'', z1, z2, z3) -{ 1 }-> z :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x, z3 = u, u >= 0 if2(z', z'', z1, z2, z3) -{ 1 }-> lcmIter(x, y, plus(x, z), u) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1, z3 = u, u >= 0 if2(z', z'', z1, z2, z3) -{ 0 }-> 0 :|: z2 = v3, v0 >= 0, v4 >= 0, z1 = v2, v1 >= 0, z'' = v1, z3 = v4, v2 >= 0, v3 >= 0, z' = v0 ifTimes(z', z'', z1) -{ 1 }-> plus(y, times(y, p(x))) :|: z1 = y, x >= 0, y >= 0, z'' = x, z' = 1 ifTimes(z', z'', z1) -{ 1 }-> 0 :|: z1 = y, z' = 2, x >= 0, y >= 0, z'' = x ifTimes(z', z'', z1) -{ 0 }-> 0 :|: v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, z' = v0 lcm(z', z'') -{ 1 }-> lcmIter(x, y, 0, times(x, y)) :|: z' = x, z'' = y, x >= 0, y >= 0 lcmIter(z', z'', z1, z2) -{ 1 }-> if(or(ge(0, x), ge(z, u)), x, y, z, u) :|: z1 = z, z2 = u, z >= 0, z' = x, z'' = y, x >= 0, y >= 0, u >= 0 or(z', z'') -{ 1 }-> y :|: z'' = y, y >= 0, z' = 1 or(z', z'') -{ 1 }-> 2 :|: z' = 2, z'' = y, y >= 0 or(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 p(z') -{ 1 }-> x :|: z' = 1 + x, x >= 0 p(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 plus(z', z'') -{ 1 }-> y :|: z'' = y, y >= 0, z' = 0 plus(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 plus(z', z'') -{ 1 }-> 1 + plus(x, y) :|: z' = 1 + x, z'' = y, x >= 0, y >= 0 times(z', z'') -{ 1 }-> ifTimes(ge(0, x), x, y) :|: z' = x, z'' = y, x >= 0, y >= 0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (67) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (68) Obligation: Complexity Dependency Tuples Problem Rules: lcm(z0, z1) -> lcmIter(z0, z1, 0, times(z0, z1)) lcmIter(z0, z1, z2, z3) -> if(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) if(true, z0, z1, z2, z3) -> z2 if(false, z0, z1, z2, z3) -> if2(divisible(z2, z1), z0, z1, z2, z3) if2(true, z0, z1, z2, z3) -> z2 if2(false, z0, z1, z2, z3) -> lcmIter(z0, z1, plus(z0, z2), z3) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) p(s(z0)) -> z0 p(0) -> s(s(0)) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) or(true, z0) -> true or(false, z0) -> z0 divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false div(s(z0), z1, s(z2)) -> div(z0, z1, z2) a -> b a -> c Tuples: LCM(z0, z1) -> c1(LCMITER(z0, z1, 0, times(z0, z1)), TIMES(z0, z1)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), OR(ge(0, z0), ge(z2, z3)), GE(0, z0)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), OR(ge(0, z0), ge(z2, z3)), GE(z2, z3)) IF(true, z0, z1, z2, z3) -> c4 IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(true, z0, z1, z2, z3) -> c6 IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(0, z0) -> c8 PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1), GE(0, z0)) IFTIMES(true, z0, z1) -> c11 IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0)), P(z0)) P(s(z0)) -> c13 P(0) -> c14 GE(z0, 0) -> c15 GE(0, s(z0)) -> c16 GE(s(z0), s(z1)) -> c17(GE(z0, z1)) OR(true, z0) -> c18 OR(false, z0) -> c19 DIVISIBLE(0, s(z0)) -> c20 DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(0, z0, s(z1)) -> c23 DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) A -> c25 A -> c26 S tuples: LCM(z0, z1) -> c1(LCMITER(z0, z1, 0, times(z0, z1)), TIMES(z0, z1)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), OR(ge(0, z0), ge(z2, z3)), GE(0, z0)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), OR(ge(0, z0), ge(z2, z3)), GE(z2, z3)) IF(true, z0, z1, z2, z3) -> c4 IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(true, z0, z1, z2, z3) -> c6 IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(0, z0) -> c8 PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1), GE(0, z0)) IFTIMES(true, z0, z1) -> c11 IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0)), P(z0)) P(s(z0)) -> c13 P(0) -> c14 GE(z0, 0) -> c15 GE(0, s(z0)) -> c16 GE(s(z0), s(z1)) -> c17(GE(z0, z1)) OR(true, z0) -> c18 OR(false, z0) -> c19 DIVISIBLE(0, s(z0)) -> c20 DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(0, z0, s(z1)) -> c23 DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) A -> c25 A -> c26 K tuples:none Defined Rule Symbols: lcm_2, lcmIter_4, if_5, if2_5, plus_2, times_2, ifTimes_3, p_1, ge_2, or_2, divisible_2, div_3, a Defined Pair Symbols: LCM_2, LCMITER_4, IF_5, IF2_5, PLUS_2, TIMES_2, IFTIMES_3, P_1, GE_2, OR_2, DIVISIBLE_2, DIV_3, A Compound Symbols: c1_2, c2_3, c3_3, c4, c5_2, c6, c7_2, c8, c9_1, c10_2, c11, c12_3, c13, c14, c15, c16, c17_1, c18, c19, c20, c21_1, c22_1, c23, c24_1, c25, c26 ---------------------------------------- (69) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 14 trailing nodes: GE(0, s(z0)) -> c16 IF(true, z0, z1, z2, z3) -> c4 A -> c25 A -> c26 IFTIMES(true, z0, z1) -> c11 OR(true, z0) -> c18 IF2(true, z0, z1, z2, z3) -> c6 P(s(z0)) -> c13 DIVISIBLE(0, s(z0)) -> c20 PLUS(0, z0) -> c8 DIV(0, z0, s(z1)) -> c23 GE(z0, 0) -> c15 OR(false, z0) -> c19 P(0) -> c14 ---------------------------------------- (70) Obligation: Complexity Dependency Tuples Problem Rules: lcm(z0, z1) -> lcmIter(z0, z1, 0, times(z0, z1)) lcmIter(z0, z1, z2, z3) -> if(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) if(true, z0, z1, z2, z3) -> z2 if(false, z0, z1, z2, z3) -> if2(divisible(z2, z1), z0, z1, z2, z3) if2(true, z0, z1, z2, z3) -> z2 if2(false, z0, z1, z2, z3) -> lcmIter(z0, z1, plus(z0, z2), z3) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) p(s(z0)) -> z0 p(0) -> s(s(0)) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) or(true, z0) -> true or(false, z0) -> z0 divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false div(s(z0), z1, s(z2)) -> div(z0, z1, z2) a -> b a -> c Tuples: LCM(z0, z1) -> c1(LCMITER(z0, z1, 0, times(z0, z1)), TIMES(z0, z1)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), OR(ge(0, z0), ge(z2, z3)), GE(0, z0)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), OR(ge(0, z0), ge(z2, z3)), GE(z2, z3)) IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1), GE(0, z0)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0)), P(z0)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) S tuples: LCM(z0, z1) -> c1(LCMITER(z0, z1, 0, times(z0, z1)), TIMES(z0, z1)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), OR(ge(0, z0), ge(z2, z3)), GE(0, z0)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), OR(ge(0, z0), ge(z2, z3)), GE(z2, z3)) IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1), GE(0, z0)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0)), P(z0)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) K tuples:none Defined Rule Symbols: lcm_2, lcmIter_4, if_5, if2_5, plus_2, times_2, ifTimes_3, p_1, ge_2, or_2, divisible_2, div_3, a Defined Pair Symbols: LCM_2, LCMITER_4, IF_5, IF2_5, PLUS_2, TIMES_2, IFTIMES_3, GE_2, DIVISIBLE_2, DIV_3 Compound Symbols: c1_2, c2_3, c3_3, c5_2, c7_2, c9_1, c10_2, c12_3, c17_1, c21_1, c22_1, c24_1 ---------------------------------------- (71) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 5 trailing tuple parts ---------------------------------------- (72) Obligation: Complexity Dependency Tuples Problem Rules: lcm(z0, z1) -> lcmIter(z0, z1, 0, times(z0, z1)) lcmIter(z0, z1, z2, z3) -> if(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) if(true, z0, z1, z2, z3) -> z2 if(false, z0, z1, z2, z3) -> if2(divisible(z2, z1), z0, z1, z2, z3) if2(true, z0, z1, z2, z3) -> z2 if2(false, z0, z1, z2, z3) -> lcmIter(z0, z1, plus(z0, z2), z3) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) p(s(z0)) -> z0 p(0) -> s(s(0)) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) or(true, z0) -> true or(false, z0) -> z0 divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false div(s(z0), z1, s(z2)) -> div(z0, z1, z2) a -> b a -> c Tuples: LCM(z0, z1) -> c1(LCMITER(z0, z1, 0, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) S tuples: LCM(z0, z1) -> c1(LCMITER(z0, z1, 0, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) K tuples:none Defined Rule Symbols: lcm_2, lcmIter_4, if_5, if2_5, plus_2, times_2, ifTimes_3, p_1, ge_2, or_2, divisible_2, div_3, a Defined Pair Symbols: LCM_2, IF_5, IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3 Compound Symbols: c1_2, c5_2, c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c10_1, c12_2 ---------------------------------------- (73) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (74) Obligation: Complexity Dependency Tuples Problem Rules: lcm(z0, z1) -> lcmIter(z0, z1, 0, times(z0, z1)) lcmIter(z0, z1, z2, z3) -> if(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) if(true, z0, z1, z2, z3) -> z2 if(false, z0, z1, z2, z3) -> if2(divisible(z2, z1), z0, z1, z2, z3) if2(true, z0, z1, z2, z3) -> z2 if2(false, z0, z1, z2, z3) -> lcmIter(z0, z1, plus(z0, z2), z3) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) p(s(z0)) -> z0 p(0) -> s(s(0)) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) or(true, z0) -> true or(false, z0) -> z0 divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false div(s(z0), z1, s(z2)) -> div(z0, z1, z2) a -> b a -> c Tuples: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCM(z0, z1) -> c4(TIMES(z0, z1)) S tuples: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCM(z0, z1) -> c4(TIMES(z0, z1)) K tuples:none Defined Rule Symbols: lcm_2, lcmIter_4, if_5, if2_5, plus_2, times_2, ifTimes_3, p_1, ge_2, or_2, divisible_2, div_3, a Defined Pair Symbols: IF_5, IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2 Compound Symbols: c5_2, c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c10_1, c12_2, c4_1 ---------------------------------------- (75) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: LCM(z0, z1) -> c4(TIMES(z0, z1)) ---------------------------------------- (76) Obligation: Complexity Dependency Tuples Problem Rules: lcm(z0, z1) -> lcmIter(z0, z1, 0, times(z0, z1)) lcmIter(z0, z1, z2, z3) -> if(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) if(true, z0, z1, z2, z3) -> z2 if(false, z0, z1, z2, z3) -> if2(divisible(z2, z1), z0, z1, z2, z3) if2(true, z0, z1, z2, z3) -> z2 if2(false, z0, z1, z2, z3) -> lcmIter(z0, z1, plus(z0, z2), z3) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) p(s(z0)) -> z0 p(0) -> s(s(0)) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) or(true, z0) -> true or(false, z0) -> z0 divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false div(s(z0), z1, s(z2)) -> div(z0, z1, z2) a -> b a -> c Tuples: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) S tuples: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) K tuples:none Defined Rule Symbols: lcm_2, lcmIter_4, if_5, if2_5, plus_2, times_2, ifTimes_3, p_1, ge_2, or_2, divisible_2, div_3, a Defined Pair Symbols: IF_5, IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2 Compound Symbols: c5_2, c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c10_1, c12_2, c4_1 ---------------------------------------- (77) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) ---------------------------------------- (78) Obligation: Complexity Dependency Tuples Problem Rules: lcm(z0, z1) -> lcmIter(z0, z1, 0, times(z0, z1)) lcmIter(z0, z1, z2, z3) -> if(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) if(true, z0, z1, z2, z3) -> z2 if(false, z0, z1, z2, z3) -> if2(divisible(z2, z1), z0, z1, z2, z3) if2(true, z0, z1, z2, z3) -> z2 if2(false, z0, z1, z2, z3) -> lcmIter(z0, z1, plus(z0, z2), z3) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) p(s(z0)) -> z0 p(0) -> s(s(0)) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) or(true, z0) -> true or(false, z0) -> z0 divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false div(s(z0), z1, s(z2)) -> div(z0, z1, z2) a -> b a -> c Tuples: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) S tuples: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) Defined Rule Symbols: lcm_2, lcmIter_4, if_5, if2_5, plus_2, times_2, ifTimes_3, p_1, ge_2, or_2, divisible_2, div_3, a Defined Pair Symbols: IF_5, IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2 Compound Symbols: c5_2, c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c10_1, c12_2, c4_1 ---------------------------------------- (79) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: lcm(z0, z1) -> lcmIter(z0, z1, 0, times(z0, z1)) lcmIter(z0, z1, z2, z3) -> if(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) if(true, z0, z1, z2, z3) -> z2 if(false, z0, z1, z2, z3) -> if2(divisible(z2, z1), z0, z1, z2, z3) if2(true, z0, z1, z2, z3) -> z2 if2(false, z0, z1, z2, z3) -> lcmIter(z0, z1, plus(z0, z2), z3) a -> b a -> c ---------------------------------------- (80) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) S tuples: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF_5, IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2 Compound Symbols: c5_2, c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c10_1, c12_2, c4_1 ---------------------------------------- (81) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) by IF(false, x0, s(z0), 0, x3) -> c5(IF2(true, x0, s(z0), 0, x3), DIVISIBLE(0, s(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) ---------------------------------------- (82) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z0), 0, x3) -> c5(IF2(true, x0, s(z0), 0, x3), DIVISIBLE(0, s(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z0), 0, x3) -> c5(IF2(true, x0, s(z0), 0, x3), DIVISIBLE(0, s(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c10_1, c12_2, c4_1, c5_2 ---------------------------------------- (83) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IF(false, x0, s(z0), 0, x3) -> c5(IF2(true, x0, s(z0), 0, x3), DIVISIBLE(0, s(z0))) ---------------------------------------- (84) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c10_1, c12_2, c4_1, c5_2 ---------------------------------------- (85) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) by LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, 0, s(z0)) -> c2(IF(or(ge(0, x0), false), x0, x1, 0, s(z0))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) ---------------------------------------- (86) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, 0, s(z0)) -> c2(IF(or(ge(0, x0), false), x0, x1, 0, s(z0))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, 0, s(z0)) -> c2(IF(or(ge(0, x0), false), x0, x1, 0, s(z0))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c10_1, c12_2, c4_1, c5_2, c2_1 ---------------------------------------- (87) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(x0, x1, 0, s(z0)) -> c2(IF(or(ge(0, x0), false), x0, x1, 0, s(z0))) ---------------------------------------- (88) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c10_1, c12_2, c4_1, c5_2, c2_1 ---------------------------------------- (89) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_1 + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(ifTimes(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(or(x_1, x_2)) = x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = 0 POL(true) = 0 ---------------------------------------- (90) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c10_1, c12_2, c4_1, c5_2, c2_1 ---------------------------------------- (91) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) by LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0), GE(z0, 0)) LCMITER(x0, x1, 0, s(z0)) -> c3(IF(or(ge(0, x0), false), x0, x1, 0, s(z0)), GE(0, s(z0))) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) ---------------------------------------- (92) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0), GE(z0, 0)) LCMITER(x0, x1, 0, s(z0)) -> c3(IF(or(ge(0, x0), false), x0, x1, 0, s(z0)), GE(0, s(z0))) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0), GE(z0, 0)) LCMITER(x0, x1, 0, s(z0)) -> c3(IF(or(ge(0, x0), false), x0, x1, 0, s(z0)), GE(0, s(z0))) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c4_1, c5_2, c2_1, c3_2 ---------------------------------------- (93) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(x0, x1, 0, s(z0)) -> c3(IF(or(ge(0, x0), false), x0, x1, 0, s(z0)), GE(0, s(z0))) ---------------------------------------- (94) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0), GE(z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0), GE(z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c4_1, c5_2, c2_1, c3_2 ---------------------------------------- (95) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (96) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c4_1, c5_2, c2_1, c3_2, c3_1 ---------------------------------------- (97) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_1 + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(ifTimes(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(or(x_1, x_2)) = x_2 POL(p(x_1)) = [1] + x_1 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = 0 POL(true) = 0 ---------------------------------------- (98) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c4_1, c5_2, c2_1, c3_2, c3_1 ---------------------------------------- (99) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) by TIMES(0, x1) -> c10(IFTIMES(true, 0, x1)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) ---------------------------------------- (100) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(0, x1) -> c10(IFTIMES(true, 0, x1)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(0, x1) -> c10(IFTIMES(true, 0, x1)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, IFTIMES_3, LCM_2, IF_5, LCMITER_4, TIMES_2 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c12_2, c4_1, c5_2, c2_1, c3_2, c3_1, c10_1 ---------------------------------------- (101) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: TIMES(0, x1) -> c10(IFTIMES(true, 0, x1)) ---------------------------------------- (102) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, IFTIMES_3, LCM_2, IF_5, LCMITER_4, TIMES_2 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c12_2, c4_1, c5_2, c2_1, c3_2, c3_1, c10_1 ---------------------------------------- (103) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) by IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c12(PLUS(x1, times(x1, s(s(0)))), TIMES(x1, p(0))) ---------------------------------------- (104) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c12(PLUS(x1, times(x1, s(s(0)))), TIMES(x1, p(0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c12(PLUS(x1, times(x1, s(s(0)))), TIMES(x1, p(0))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCM_2, IF_5, LCMITER_4, TIMES_2, IFTIMES_3 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c4_1, c5_2, c2_1, c3_2, c3_1, c10_1, c12_2 ---------------------------------------- (105) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (106) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCM_2, IF_5, LCMITER_4, TIMES_2, IFTIMES_3 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c4_1, c5_2, c2_1, c3_2, c3_1, c10_1, c12_2, c_1 ---------------------------------------- (107) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) ---------------------------------------- (108) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCM_2, IF_5, LCMITER_4, TIMES_2, IFTIMES_3 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c4_1, c5_2, c2_1, c3_2, c3_1, c10_1, c12_2, c_1 ---------------------------------------- (109) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) by LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) ---------------------------------------- (110) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, IF_5, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c5_2, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1 ---------------------------------------- (111) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF(false, x0, s(z1), s(z0), x3) -> c5(IF2(div(s(z0), s(z1), s(z1)), x0, s(z1), s(z0), x3), DIVISIBLE(s(z0), s(z1))) by IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) ---------------------------------------- (112) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1 ---------------------------------------- (113) 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, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) We considered the (Usable) Rules:none And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = 0 POL(DIVISIBLE(x_1, x_2)) = 0 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = x_3 POL(IFTIMES(x_1, x_2, x_3)) = x_1 POL(LCM(x_1, x_2)) = x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(ge(x_1, x_2)) = 0 POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = [1] + x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = [1] POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (114) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1 ---------------------------------------- (115) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) by LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) ---------------------------------------- (116) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1 ---------------------------------------- (117) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(x0, x1, s(z0), s(z1)) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1))) by LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) ---------------------------------------- (118) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1 ---------------------------------------- (119) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = 0 POL(DIVISIBLE(x_1, x_2)) = 0 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_1 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (120) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1 ---------------------------------------- (121) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(0, x1, x2, x3) -> c2(IF(or(true, ge(x2, x3)), 0, x1, x2, x3)) by LCMITER(0, x0, x1, x2) -> c2(IF(true, 0, x0, x1, x2)) LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c2(IF(or(true, false), 0, x0, 0, s(z0))) LCMITER(0, x0, s(z0), s(z1)) -> c2(IF(or(true, ge(z0, z1)), 0, x0, s(z0), s(z1))) ---------------------------------------- (122) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2(IF(true, 0, x0, x1, x2)) LCMITER(0, x0, 0, s(z0)) -> c2(IF(or(true, false), 0, x0, 0, s(z0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2(IF(true, 0, x0, x1, x2)) LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c2(IF(or(true, false), 0, x0, 0, s(z0))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1 ---------------------------------------- (123) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (124) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2 ---------------------------------------- (125) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(0, x0, 0, s(z0)) -> c2 We considered the (Usable) Rules: plus(s(z0), z1) -> s(plus(z0, z1)) plus(0, z0) -> z0 And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = x_1 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = x_2 + x_3 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2) = 0 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(ge(x_1, x_2)) = 0 POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = [1] + x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = x_2 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (126) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, x1, x2) -> c2 K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x0, 0, s(z0)) -> c2 Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2 ---------------------------------------- (127) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(0, x0, x1, x2) -> c2 We considered the (Usable) Rules:none And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = x_1 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2) = 0 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(ge(x_1, x_2)) = 0 POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = [1] + x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (128) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x0, 0, s(z0)) -> c2 LCMITER(0, x0, x1, x2) -> c2 Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2 ---------------------------------------- (129) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false or(false, z0) -> z0 or(true, z0) -> true ge(z0, 0) -> true And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_1 + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2) = 0 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (130) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x0, 0, s(z0)) -> c2 LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c2_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2 ---------------------------------------- (131) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(s(z0), x1, x2, x3) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3)) by LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c2(IF(or(false, false), s(x0), x1, 0, s(z0))) LCMITER(s(x0), x1, s(z0), s(z1)) -> c2(IF(or(false, ge(z0, z1)), s(x0), x1, s(z0), s(z1))) ---------------------------------------- (132) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, 0, s(z0)) -> c2(IF(or(false, false), s(x0), x1, 0, s(z0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c2(IF(or(false, false), s(x0), x1, 0, s(z0))) K tuples: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) LCMITER(x0, x1, z0, 0) -> c2(IF(or(ge(0, x0), true), x0, x1, z0, 0)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x0, 0, s(z0)) -> c2 LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c2 ---------------------------------------- (133) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: LCMITER(0, x0, 0, s(z0)) -> c2 LCMITER(0, x0, x1, x2) -> c2 ---------------------------------------- (134) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, 0, s(z0)) -> c2(IF(or(false, false), s(x0), x1, 0, s(z0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c2(IF(or(false, false), s(x0), x1, 0, s(z0))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1 ---------------------------------------- (135) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (136) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c2 ---------------------------------------- (137) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(s(x0), x1, 0, s(z0)) -> c2 We considered the (Usable) Rules: plus(s(z0), z1) -> s(plus(z0, z1)) plus(0, z0) -> z0 And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = x_1 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = x_2 + x_3 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2) = 0 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(ge(x_1, x_2)) = 0 POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = [1] + x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = x_2 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (138) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c2 ---------------------------------------- (139) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_1 + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2) = 0 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(ifTimes(x_1, x_2, x_3)) = 0 POL(or(x_1, x_2)) = x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (140) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c2 ---------------------------------------- (141) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(x0, x1, s(z0), s(z1)) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(z0), s(z1)), GE(s(z0), s(z1))) by LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) ---------------------------------------- (142) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c2 LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c2 ---------------------------------------- (143) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, 0, s(z0)) -> c2 ---------------------------------------- (144) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1 ---------------------------------------- (145) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) We considered the (Usable) Rules:none And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = x_1 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(ge(x_1, x_2)) = 0 POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = [1] + x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (146) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1 ---------------------------------------- (147) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_1 + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (148) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1 ---------------------------------------- (149) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(0, x1, x2, x3) -> c3(IF(or(true, ge(x2, x3)), 0, x1, x2, x3), GE(x2, x3)) by LCMITER(0, x0, x1, x2) -> c3(IF(true, 0, x0, x1, x2), GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0), GE(z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3(IF(or(true, false), 0, x0, 0, s(z0)), GE(0, s(z0))) LCMITER(0, x0, s(z0), s(z1)) -> c3(IF(or(true, ge(z0, z1)), 0, x0, s(z0), s(z1)), GE(s(z0), s(z1))) ---------------------------------------- (150) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(IF(true, 0, x0, x1, x2), GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0), GE(z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3(IF(or(true, false), 0, x0, 0, s(z0)), GE(0, s(z0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(IF(true, 0, x0, x1, x2), GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0), GE(z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3(IF(or(true, false), 0, x0, 0, s(z0)), GE(0, s(z0))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1 ---------------------------------------- (151) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 4 trailing tuple parts ---------------------------------------- (152) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3 K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3 ---------------------------------------- (153) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, 0, s(z0)) -> c3 We considered the (Usable) Rules:none And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = x_1 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3) = 0 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(ge(x_1, x_2)) = 0 POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = [1] + x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (154) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, 0, s(z0)) -> c3 Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3 ---------------------------------------- (155) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false or(false, z0) -> z0 or(true, z0) -> true ge(z0, 0) -> true And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_1 + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3) = 0 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (156) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, 0, s(z0)) -> c3 LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_2, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3 ---------------------------------------- (157) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(s(z0), x1, x2, x3) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, x2, x3), GE(x2, x3)) by LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0), GE(z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3(IF(or(false, false), s(x0), x1, 0, s(z0)), GE(0, s(z0))) LCMITER(s(x0), x1, s(z0), s(z1)) -> c3(IF(or(false, ge(z0, z1)), s(x0), x1, s(z0), s(z1)), GE(s(z0), s(z1))) ---------------------------------------- (158) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(0, x0, 0, s(z0)) -> c3 LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0), GE(z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3(IF(or(false, false), s(x0), x1, 0, s(z0)), GE(0, s(z0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0), GE(z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3(IF(or(false, false), s(x0), x1, 0, s(z0)), GE(0, s(z0))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, 0, s(z0)) -> c3 LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3 ---------------------------------------- (159) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, 0, s(z0)) -> c3 ---------------------------------------- (160) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0), GE(z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3(IF(or(false, false), s(x0), x1, 0, s(z0)), GE(0, s(z0))) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0), GE(z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3(IF(or(false, false), s(x0), x1, 0, s(z0)), GE(0, s(z0))) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2 ---------------------------------------- (161) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (162) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3 ---------------------------------------- (163) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(s(x0), x1, 0, s(z0)) -> c3 We considered the (Usable) Rules: plus(s(z0), z1) -> s(plus(z0, z1)) plus(0, z0) -> z0 And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = x_1 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = x_2 + x_3 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3) = 0 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(ge(x_1, x_2)) = 0 POL(ifTimes(x_1, x_2, x_3)) = 0 POL(or(x_1, x_2)) = [1] + x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = x_2 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (164) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3 ---------------------------------------- (165) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true And the Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_1 + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3) = 0 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(divisible(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(ifTimes(x_1, x_2, x_3)) = x_2 POL(or(x_1, x_2)) = x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] POL(true) = 0 ---------------------------------------- (166) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, LCMITER_4, TIMES_2, IFTIMES_3, LCM_2, IF_5 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c3_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3 ---------------------------------------- (167) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) by LCMITER(0, x1, x2, 0) -> c3(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c3(IF(or(false, true), s(z0), x1, x2, 0)) ---------------------------------------- (168) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) K tuples: LCMITER(x0, x1, z0, 0) -> c3(IF(or(ge(0, x0), true), x0, x1, z0, 0)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, 0, s(z0)) -> c3 LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c3 ---------------------------------------- (169) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, 0, s(z0)) -> c3 ---------------------------------------- (170) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) S tuples: IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: IF2_5, PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4 Compound Symbols: c7_2, c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1 ---------------------------------------- (171) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) by IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3), PLUS(0, z0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) ---------------------------------------- (172) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3), PLUS(0, z0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3), PLUS(0, z0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4, IF2_5 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2 ---------------------------------------- (173) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (174) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4, IF2_5 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1 ---------------------------------------- (175) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFTIMES(false, x0, z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, p(x0))), TIMES(z0, p(x0))) by IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0)))), TIMES(x1, p(0))) IFTIMES(false, x0, 0) -> c12(PLUS(0, ifTimes(true, 0, p(x0))), TIMES(0, p(x0))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) ---------------------------------------- (176) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0)))), TIMES(x1, p(0))) IFTIMES(false, x0, 0) -> c12(PLUS(0, ifTimes(true, 0, p(x0))), TIMES(0, p(x0))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0)))), TIMES(x1, p(0))) IFTIMES(false, x0, 0) -> c12(PLUS(0, ifTimes(true, 0, p(x0))), TIMES(0, p(x0))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4, IF2_5 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1 ---------------------------------------- (177) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFTIMES(false, x0, 0) -> c12(PLUS(0, ifTimes(true, 0, p(x0))), TIMES(0, p(x0))) ---------------------------------------- (178) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0)))), TIMES(x1, p(0))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0)))), TIMES(x1, p(0))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4, IF2_5 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1 ---------------------------------------- (179) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (180) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4, IF2_5 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c1_1 ---------------------------------------- (181) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) ---------------------------------------- (182) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4, IF2_5 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c12_2, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c1_1 ---------------------------------------- (183) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, times(x1, z0)), TIMES(x1, p(s(z0)))) by IFTIMES(false, s(z1), z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, z1)), TIMES(z0, p(s(z1)))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) ---------------------------------------- (184) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4, IF2_5 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1 ---------------------------------------- (185) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) by IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) ---------------------------------------- (186) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IFTIMES_3, LCM_2, IF_5, LCMITER_4, IF2_5 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1 ---------------------------------------- (187) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) by IFTIMES(false, 0, x0) -> c(TIMES(x0, s(s(0)))) ---------------------------------------- (188) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) IFTIMES(false, 0, x0) -> c(TIMES(x0, s(s(0)))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IFTIMES(false, 0, x1) -> c(PLUS(x1, times(x1, s(s(0))))) IFTIMES(false, 0, x1) -> c(TIMES(x1, p(0))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, LCM_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1 ---------------------------------------- (189) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: IFTIMES(false, 0, x0) -> c(TIMES(x0, s(s(0)))) ---------------------------------------- (190) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, LCM_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c4_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1 ---------------------------------------- (191) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) by LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) ---------------------------------------- (192) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (193) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) by LCMITER(0, x0, x1, 0) -> c2(IF(true, 0, x0, x1, 0)) ---------------------------------------- (194) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(0, x0, x1, 0) -> c2(IF(true, 0, x0, x1, 0)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (195) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, x1, 0) -> c2(IF(true, 0, x0, x1, 0)) ---------------------------------------- (196) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (197) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) by LCMITER(s(x0), x1, x2, 0) -> c2(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (198) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(s(x0), x1, x2, 0) -> c2(IF(true, s(x0), x1, x2, 0)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (199) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, x2, 0) -> c2(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (200) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (201) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(0, x0, z0, 0) -> c2(IF(or(true, true), 0, x0, z0, 0)) by LCMITER(0, x0, x1, 0) -> c2(IF(true, 0, x0, x1, 0)) ---------------------------------------- (202) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(0, x0, x1, 0) -> c2(IF(true, 0, x0, x1, 0)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, x1, x2, 0) -> c2(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (203) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, x1, 0) -> c2(IF(true, 0, x0, x1, 0)) ---------------------------------------- (204) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (205) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(s(x0), x1, z0, 0) -> c2(IF(or(false, true), s(x0), x1, z0, 0)) by LCMITER(s(x0), x1, x2, 0) -> c2(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (206) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(s(x0), x1, x2, 0) -> c2(IF(true, s(x0), x1, x2, 0)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(s(z0), x1, x2, 0) -> c2(IF(or(false, true), s(z0), x1, x2, 0)) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (207) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, x2, 0) -> c2(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (208) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (209) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) by LCMITER(0, x0, x1, 0) -> c3(IF(true, 0, x0, x1, 0)) ---------------------------------------- (210) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(0, x0, x1, 0) -> c3(IF(true, 0, x0, x1, 0)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (211) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, x1, 0) -> c3(IF(true, 0, x0, x1, 0)) ---------------------------------------- (212) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(0, x1, x2, 0) -> c3(IF(or(true, true), 0, x1, x2, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (213) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) by LCMITER(s(x0), x1, x2, 0) -> c3(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (214) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) LCMITER(0, x1, x2, 0) -> c3(IF(or(true, true), 0, x1, x2, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(s(x0), x1, x2, 0) -> c3(IF(true, s(x0), x1, x2, 0)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (215) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, x2, 0) -> c3(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (216) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(0, x1, x2, 0) -> c3(IF(or(true, true), 0, x1, x2, 0)) LCMITER(s(z0), x1, x2, 0) -> c3(IF(or(false, true), s(z0), x1, x2, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (217) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(0, x1, x2, 0) -> c3(IF(or(true, true), 0, x1, x2, 0)) by LCMITER(0, x0, x1, 0) -> c3(IF(true, 0, x0, x1, 0)) ---------------------------------------- (218) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, 0) -> c3(IF(or(false, true), s(z0), x1, x2, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(0, x0, x1, 0) -> c3(IF(true, 0, x0, x1, 0)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(0, x0, z0, 0) -> c3(IF(or(true, true), 0, x0, z0, 0)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (219) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, x1, 0) -> c3(IF(true, 0, x0, x1, 0)) ---------------------------------------- (220) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) LCMITER(s(z0), x1, x2, 0) -> c3(IF(or(false, true), s(z0), x1, x2, 0)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (221) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LCMITER(s(z0), x1, x2, 0) -> c3(IF(or(false, true), s(z0), x1, x2, 0)) by LCMITER(s(x0), x1, x2, 0) -> c3(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (222) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(s(x0), x1, x2, 0) -> c3(IF(true, s(x0), x1, x2, 0)) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, z0, 0) -> c3(IF(or(false, true), s(x0), x1, z0, 0)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (223) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, x2, 0) -> c3(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (224) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (225) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) by LCMITER(0, z0, s(z1), s(z2)) -> c2(IF(true, 0, z0, s(z1), s(z2))) ---------------------------------------- (226) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c2(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) LCMITER(0, z0, s(z1), s(z2)) -> c2(IF(true, 0, z0, s(z1), s(z2))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) LCMITER(0, z0, s(z1), s(z2)) -> c2(IF(true, 0, z0, s(z1), s(z2))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (227) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, z0, s(z1), s(z2)) -> c2(IF(true, 0, z0, s(z1), s(z2))) ---------------------------------------- (228) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, s(z0), s(z1)) -> c2(IF(or(true, ge(z0, z1)), 0, x0, s(z0), s(z1))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) S tuples: PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: PLUS_2, GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2 Compound Symbols: c9_1, c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1 ---------------------------------------- (229) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) by PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) ---------------------------------------- (230) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, s(z0), s(z1)) -> c2(IF(or(true, ge(z0, z1)), 0, x0, s(z0), s(z1))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (231) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) by LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) ---------------------------------------- (232) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(0, x0, s(z0), s(z1)) -> c2(IF(or(true, ge(z0, z1)), 0, x0, s(z0), s(z1))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (233) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LCMITER(0, x0, s(z0), s(z1)) -> c2(IF(or(true, ge(z0, z1)), 0, x0, s(z0), s(z1))) by LCMITER(0, z0, s(z1), s(z2)) -> c2(IF(true, 0, z0, s(z1), s(z2))) ---------------------------------------- (234) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c2(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c2(IF(true, 0, z0, s(z1), s(z2))) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (235) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, z0, s(z1), s(z2)) -> c2(IF(true, 0, z0, s(z1), s(z2))) ---------------------------------------- (236) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(s(x0), x1, s(z0), s(z1)) -> c2(IF(or(false, ge(z0, z1)), s(x0), x1, s(z0), s(z1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (237) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LCMITER(s(x0), x1, s(z0), s(z1)) -> c2(IF(or(false, ge(z0, z1)), s(x0), x1, s(z0), s(z1))) by LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) ---------------------------------------- (238) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (239) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) by LCMITER(0, z0, s(z1), s(z2)) -> c3(IF(true, 0, z0, s(z1), s(z2)), GE(s(z1), s(z2))) ---------------------------------------- (240) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(IF(true, 0, z0, s(z1), s(z2)), GE(s(z1), s(z2))) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(IF(true, 0, z0, s(z1), s(z2)), GE(s(z1), s(z2))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (241) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (242) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (243) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) We considered the (Usable) Rules: divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(z0, z1, 0) -> divisible(z0, z1) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(0, z0, s(z1)) -> false divisible(0, s(z0)) -> true And the Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DIV(x_1, x_2, x_3)) = x_2 POL(DIVISIBLE(x_1, x_2)) = x_2 POL(GE(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = x_1 + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [1] + x_1 + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = [1] + x_2 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(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c7(x_1)) = x_1 POL(c7(x_1, x_2)) = x_1 + x_2 POL(c9(x_1)) = x_1 POL(div(x_1, x_2, x_3)) = [1] POL(divisible(x_1, x_2)) = [1] POL(false) = [1] POL(ge(x_1, x_2)) = 0 POL(ifTimes(x_1, x_2, x_3)) = 0 POL(or(x_1, x_2)) = [1] + x_2 POL(p(x_1)) = 0 POL(plus(x_1, x_2)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (244) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (245) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) by LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) ---------------------------------------- (246) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) S tuples: GE(s(z0), s(z1)) -> c17(GE(z0, z1)) DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: GE_2, DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2 Compound Symbols: c17_1, c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1 ---------------------------------------- (247) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace GE(s(z0), s(z1)) -> c17(GE(z0, z1)) by GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) ---------------------------------------- (248) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0))), GE(s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0)), GE(s(z0), s(0))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1 ---------------------------------------- (249) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (250) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c22_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1 ---------------------------------------- (251) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) by DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) ---------------------------------------- (252) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(0, x1, s(x2), s(x3)) -> c3(IF(or(true, ge(x2, x3)), 0, x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1 ---------------------------------------- (253) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LCMITER(0, x0, s(z0), s(z1)) -> c3(IF(or(true, ge(z0, z1)), 0, x0, s(z0), s(z1)), GE(s(z0), s(z1))) by LCMITER(0, z0, s(z1), s(z2)) -> c3(IF(true, 0, z0, s(z1), s(z2)), GE(s(z1), s(z2))) ---------------------------------------- (254) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) LCMITER(0, z0, s(z1), s(z2)) -> c3(IF(true, 0, z0, s(z1), s(z2)), GE(s(z1), s(z2))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1 ---------------------------------------- (255) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (256) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_2, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1 ---------------------------------------- (257) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace IF(false, x0, s(z2), s(z0), x3) -> c5(IF2(div(z0, s(z2), z2), x0, s(z2), s(z0), x3), DIVISIBLE(s(z0), s(z2))) by IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) ---------------------------------------- (258) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(z0), x1, s(x2), s(x3)) -> c3(IF(or(false, ge(x2, x3)), s(z0), x1, s(x2), s(x3)), GE(s(x2), s(x3))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1, c5_2 ---------------------------------------- (259) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace LCMITER(s(x0), x1, s(z0), s(z1)) -> c3(IF(or(false, ge(z0, z1)), s(x0), x1, s(z0), s(z1)), GE(s(z0), s(z1))) by LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) ---------------------------------------- (260) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1, c5_2 ---------------------------------------- (261) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) by IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) ---------------------------------------- (262) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1, c5_2 ---------------------------------------- (263) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace IFTIMES(false, x0, s(z0)) -> c12(PLUS(s(z0), ifTimes(false, s(z0), p(x0))), TIMES(s(z0), p(x0))) by IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) ---------------------------------------- (264) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1, c5_2 ---------------------------------------- (265) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) by IFTIMES(false, 0, z0) -> c1(TIMES(z0, s(s(0)))) ---------------------------------------- (266) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(z0), x1) -> c12(PLUS(x1, ifTimes(ge(0, x1), x1, z0)), TIMES(x1, p(s(z0)))) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) IFTIMES(false, 0, z0) -> c1(TIMES(z0, s(s(0)))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, x1) -> c1(TIMES(x1, p(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c12_2, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1, c5_2 ---------------------------------------- (267) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: IFTIMES(false, 0, z0) -> c1(TIMES(z0, s(s(0)))) ---------------------------------------- (268) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, s(z1), z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, z1)), TIMES(z0, p(s(z1)))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c1_1, c12_2, c12_1, c_1, c4_1, c9_1, c17_1, c22_1, c5_2 ---------------------------------------- (269) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace IFTIMES(false, s(z1), z0) -> c12(PLUS(z0, ifTimes(ge(0, z0), z0, z1)), TIMES(z0, p(s(z1)))) by IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) ---------------------------------------- (270) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c1_1, c12_1, c_1, c4_1, c9_1, c17_1, c22_1, c5_2, c12_2 ---------------------------------------- (271) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace IFTIMES(false, s(x0), x1) -> c12(TIMES(x1, p(s(x0)))) by IFTIMES(false, s(z0), z1) -> c12(TIMES(z1, z0)) ---------------------------------------- (272) Obligation: Complexity Dependency Tuples Problem Rules: divisible(0, s(z0)) -> true divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) div(s(z0), z1, s(z2)) -> div(z0, z1, z2) div(z0, z1, 0) -> divisible(z0, z1) div(0, z0, s(z1)) -> false plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) or(true, z0) -> true or(false, z0) -> z0 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) p(s(z0)) -> z0 p(0) -> s(s(0)) ifTimes(true, z0, z1) -> 0 ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) IFTIMES(false, 0, z0) -> c(PLUS(z0, ifTimes(ge(0, z0), z0, s(s(0))))) LCM(0, x1) -> c4(LCMITER(0, x1, 0, ifTimes(true, 0, x1))) LCM(s(z0), x1) -> c4(LCMITER(s(z0), x1, 0, ifTimes(false, s(z0), x1))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) IFTIMES(false, s(z0), z1) -> c12(TIMES(z1, z0)) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), x1)) LCMITER(x0, x1, s(0), s(s(z0))) -> c2(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c2(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c2(IF(ge(x2, x3), s(x0), x1, x2, x3)) LCMITER(x0, x1, s(s(z0)), s(s(z1))) -> c3(IF(or(ge(0, x0), ge(z0, z1)), x0, x1, s(s(z0)), s(s(z1))), GE(s(s(z0)), s(s(z1)))) LCMITER(s(x0), x1, x2, x3) -> c3(IF(ge(x2, x3), s(x0), x1, x2, x3), GE(x2, x3)) IF2(false, s(z0), x1, z1, x3) -> c7(LCMITER(s(z0), x1, s(plus(z0, z1)), x3), PLUS(s(z0), z1)) IF2(false, 0, x1, z0, x3) -> c7(LCMITER(0, x1, z0, x3)) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c3(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3)), GE(s(z2), s(z3))) GE(s(s(y0)), s(s(y1))) -> c17(GE(s(y0), s(y1))) LCMITER(x0, x1, s(0), s(s(z0))) -> c3(IF(or(ge(0, x0), false), x0, x1, s(0), s(s(z0)))) DIV(s(y0), s(y1), 0) -> c22(DIVISIBLE(s(y0), s(y1))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(IF2(div(x2, s(z1), z1), x0, s(z1), s(x2), s(0)), DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(IF2(div(0, s(z1), z1), x0, s(z1), s(0), s(s(x2))), DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(IF2(div(s(x2), s(z1), z1), x0, s(z1), s(s(x2)), s(s(x3))), DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(IF2(div(z2, s(z1), z1), s(x0), s(z1), s(z2), x3), DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(IF2(div(x2, s(z1), z1), s(x0), s(z1), s(x2), s(x3)), DIVISIBLE(s(x2), s(z1))) IFTIMES(false, s(z0), z1) -> c12(PLUS(z1, ifTimes(ge(0, z1), z1, z0)), TIMES(z1, z0)) IFTIMES(false, z0, s(z1)) -> c12(PLUS(s(z1), plus(p(z0), times(p(z0), p(s(z1))))), TIMES(s(z1), p(z0))) IFTIMES(false, s(z0), z1) -> c12(TIMES(z1, z0)) K tuples: IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) LCMITER(x0, x1, s(z0), s(0)) -> c2(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(x0, x1, s(x2), s(x3)) -> c3(GE(s(x2), s(x3))) LCMITER(0, x0, x1, x2) -> c3(GE(x1, x2)) IFTIMES(false, 0, x1) -> c1(PLUS(x1, ifTimes(ge(0, x1), x1, s(s(0))))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) LCMITER(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, DIV_3, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2 Compound Symbols: c21_1, c24_1, c10_1, c5_1, c2_1, c3_2, c3_1, c7_2, c7_1, c1_1, c_1, c4_1, c9_1, c17_1, c22_1, c5_2, c12_2, c12_1