KILLED proof of input_dolUJP8Z5S.trs # AProVE Commit ID: 5b976082cb74a395683ed8cc7acf94bd611ab29f fuhs 20230524 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) CpxTrsToCdtProof [UPPER BOUND(ID), 52 ms] (6) CdtProblem (7) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxRelTRS (9) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxRelTRS (11) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (12) typed CpxTrs (13) OrderProof [LOWER BOUND(ID), 46 ms] (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 307 ms] (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 173 ms] (18) BEST (19) proven lower bound (20) LowerBoundPropagationProof [FINISHED, 0 ms] (21) BOUNDS(n^1, INF) (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 133 ms] (24) typed CpxTrs (25) RewriteLemmaProof [LOWER BOUND(ID), 59 ms] (26) typed CpxTrs (27) RewriteLemmaProof [LOWER BOUND(ID), 251 ms] (28) typed CpxTrs (29) RewriteLemmaProof [LOWER BOUND(ID), 146 ms] (30) typed CpxTrs (31) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (32) CpxWeightedTrs (33) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (34) CpxTypedWeightedTrs (35) CompletionProof [UPPER BOUND(ID), 0 ms] (36) CpxTypedWeightedCompleteTrs (37) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (38) CpxTypedWeightedCompleteTrs (39) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (40) CpxRNTS (41) InliningProof [UPPER BOUND(ID), 360 ms] (42) CpxRNTS (43) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (44) CpxRNTS (45) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (46) CpxRNTS (47) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (48) CpxRNTS (49) IntTrsBoundProof [UPPER BOUND(ID), 765 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 379 ms] (52) CpxRNTS (53) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 333 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 126 ms] (58) CpxRNTS (59) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 231 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 94 ms] (64) CpxRNTS (65) ResultPropagationProof [UPPER BOUND(ID), 1 ms] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 131 ms] (68) CpxRNTS (69) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] (70) CpxRNTS (71) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (72) CpxRNTS (73) IntTrsBoundProof [UPPER BOUND(ID), 97 ms] (74) CpxRNTS (75) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (76) CpxRNTS (77) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (78) CpxRNTS (79) IntTrsBoundProof [UPPER BOUND(ID), 189 ms] (80) CpxRNTS (81) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] (82) CpxRNTS (83) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (84) CpxRNTS (85) IntTrsBoundProof [UPPER BOUND(ID), 14.5 s] (86) CpxRNTS (87) IntTrsBoundProof [UPPER BOUND(ID), 2794 ms] (88) CpxRNTS (89) CompletionProof [UPPER BOUND(ID), 0 ms] (90) CpxTypedWeightedCompleteTrs (91) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (92) CpxRNTS (93) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (94) CdtProblem (95) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (96) CdtProblem (97) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (98) CdtProblem (99) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (100) CdtProblem (101) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (102) CdtProblem (103) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (104) CdtProblem (105) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CdtProblem (107) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CpxRelTRS (109) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (110) CpxTRS (111) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (112) CpxWeightedTrs (113) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (114) CpxTypedWeightedTrs (115) CompletionProof [UPPER BOUND(ID), 0 ms] (116) CpxTypedWeightedCompleteTrs (117) NarrowingProof [BOTH BOUNDS(ID, ID), 9 ms] (118) CpxTypedWeightedCompleteTrs (119) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (120) CpxRNTS (121) InliningProof [UPPER BOUND(ID), 1315 ms] (122) CpxRNTS (123) SimplificationProof [BOTH BOUNDS(ID, ID), 5 ms] (124) CpxRNTS (125) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (126) CpxRNTS (127) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (128) CpxRNTS (129) IntTrsBoundProof [UPPER BOUND(ID), 169 ms] (130) CpxRNTS (131) IntTrsBoundProof [UPPER BOUND(ID), 24 ms] (132) CpxRNTS (133) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (134) CpxRNTS (135) IntTrsBoundProof [UPPER BOUND(ID), 790 ms] (136) CpxRNTS (137) IntTrsBoundProof [UPPER BOUND(ID), 191 ms] (138) CpxRNTS (139) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (140) CpxRNTS (141) IntTrsBoundProof [UPPER BOUND(ID), 752 ms] (142) CpxRNTS (143) IntTrsBoundProof [UPPER BOUND(ID), 271 ms] (144) CpxRNTS (145) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (146) CpxRNTS (147) IntTrsBoundProof [UPPER BOUND(ID), 381 ms] (148) CpxRNTS (149) IntTrsBoundProof [UPPER BOUND(ID), 65 ms] (150) CpxRNTS (151) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (152) CpxRNTS (153) IntTrsBoundProof [UPPER BOUND(ID), 310 ms] (154) CpxRNTS (155) IntTrsBoundProof [UPPER BOUND(ID), 34 ms] (156) CpxRNTS (157) ResultPropagationProof [UPPER BOUND(ID), 3 ms] (158) CpxRNTS (159) IntTrsBoundProof [UPPER BOUND(ID), 178 ms] (160) CpxRNTS (161) IntTrsBoundProof [UPPER BOUND(ID), 32 ms] (162) CpxRNTS (163) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (164) CpxRNTS (165) IntTrsBoundProof [UPPER BOUND(ID), 157 ms] (166) CpxRNTS (167) IntTrsBoundProof [UPPER BOUND(ID), 74 ms] (168) CpxRNTS (169) ResultPropagationProof [UPPER BOUND(ID), 1 ms] (170) CpxRNTS (171) IntTrsBoundProof [UPPER BOUND(ID), 162 ms] (172) CpxRNTS (173) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] (174) CpxRNTS (175) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (176) CpxRNTS (177) IntTrsBoundProof [UPPER BOUND(ID), 55.9 s] (178) CpxRNTS (179) IntTrsBoundProof [UPPER BOUND(ID), 24.6 s] (180) CpxRNTS (181) CompletionProof [UPPER BOUND(ID), 0 ms] (182) CpxTypedWeightedCompleteTrs (183) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (184) CpxRNTS (185) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 2 ms] (186) CdtProblem (187) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (188) CdtProblem (189) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 2 ms] (190) CdtProblem (191) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 53 ms] (194) CdtProblem (195) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (196) CdtProblem (197) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 45 ms] (202) CdtProblem (203) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (204) CdtProblem (205) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (210) CdtProblem (211) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (216) CdtProblem (217) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 48 ms] (218) CdtProblem (219) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CdtProblem (223) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 44 ms] (224) CdtProblem (225) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) CdtProblem (227) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (228) CdtProblem (229) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 48 ms] (230) CdtProblem (231) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 50 ms] (232) CdtProblem (233) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 46 ms] (234) CdtProblem (235) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (236) CdtProblem (237) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (238) CdtProblem (239) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (240) CdtProblem (241) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 47 ms] (242) CdtProblem (243) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 40 ms] (244) CdtProblem (245) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (248) CdtProblem (249) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 46 ms] (250) CdtProblem (251) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 64 ms] (252) CdtProblem (253) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (254) CdtProblem (255) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 61 ms] (258) CdtProblem (259) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 49 ms] (260) CdtProblem (261) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (262) CdtProblem (263) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (264) CdtProblem (265) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (266) CdtProblem (267) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 62 ms] (268) CdtProblem (269) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 47 ms] (270) CdtProblem (271) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (272) CdtProblem (273) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (274) CdtProblem (275) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (276) CdtProblem (277) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (278) CdtProblem (279) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (280) CdtProblem (281) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (282) CdtProblem (283) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (284) CdtProblem (285) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (286) CdtProblem (287) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (288) CdtProblem (289) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (290) CdtProblem (291) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (292) CdtProblem (293) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (294) CdtProblem (295) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (296) CdtProblem (297) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (298) CdtProblem (299) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (300) CdtProblem (301) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (302) CdtProblem (303) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (304) CdtProblem (305) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (306) CdtProblem (307) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (308) CdtProblem (309) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (310) CdtProblem (311) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (312) CdtProblem (313) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (314) CdtProblem (315) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (316) CdtProblem (317) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (318) CdtProblem (319) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (320) CdtProblem (321) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 31 ms] (322) CdtProblem (323) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (324) CdtProblem (325) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 24 ms] (326) CdtProblem (327) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (328) CdtProblem (329) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (330) CdtProblem (331) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (332) CdtProblem (333) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (334) CdtProblem (335) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (336) CdtProblem (337) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (338) CdtProblem (339) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (340) CdtProblem (341) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (342) CdtProblem (343) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (344) CdtProblem (345) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (346) CdtProblem (347) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (348) CdtProblem (349) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (350) CdtProblem (351) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (352) CdtProblem (353) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (354) CdtProblem (355) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 52 ms] (356) CdtProblem (357) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (358) CdtProblem (359) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (360) CdtProblem (361) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (362) CdtProblem (363) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (364) CdtProblem (365) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (366) CdtProblem (367) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (368) CdtProblem (369) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (370) CdtProblem (371) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (372) CdtProblem (373) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (374) CdtProblem (375) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (376) 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) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (6) 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 ---------------------------------------- (7) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (8) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: 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 The (relative) TRS S consists of the following 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 Rewrite Strategy: INNERMOST ---------------------------------------- (9) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (10) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: 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 The (relative) TRS S consists of the following 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 Rewrite Strategy: INNERMOST ---------------------------------------- (11) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (12) Obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 ---------------------------------------- (13) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: LCMITER, times, TIMES, ge, GE, divisible, DIVISIBLE, plus, PLUS, DIV, lcmIter, div They will be analysed ascendingly in the following order: ge < LCMITER GE < LCMITER divisible < LCMITER DIVISIBLE < LCMITER plus < LCMITER PLUS < LCMITER times < TIMES ge < times plus < times ge < TIMES GE < TIMES PLUS < TIMES ge < lcmIter divisible < lcmIter divisible = div DIVISIBLE = DIV plus < lcmIter ---------------------------------------- (14) Obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 Generator Equations: gen_0':s17_27(0) <=> 0' gen_0':s17_27(+(x, 1)) <=> s(gen_0':s17_27(x)) gen_c15:c16:c1718_27(0) <=> c15 gen_c15:c16:c1718_27(+(x, 1)) <=> c17(gen_c15:c16:c1718_27(x)) gen_c8:c919_27(0) <=> c8 gen_c8:c919_27(+(x, 1)) <=> c9(gen_c8:c919_27(x)) gen_c22:c23:c2420_27(0) <=> c22(c20) gen_c22:c23:c2420_27(+(x, 1)) <=> c24(gen_c22:c23:c2420_27(x)) The following defined symbols remain to be analysed: ge, LCMITER, times, TIMES, GE, divisible, DIVISIBLE, plus, PLUS, DIV, lcmIter, div They will be analysed ascendingly in the following order: ge < LCMITER GE < LCMITER divisible < LCMITER DIVISIBLE < LCMITER plus < LCMITER PLUS < LCMITER times < TIMES ge < times plus < times ge < TIMES GE < TIMES PLUS < TIMES ge < lcmIter divisible < lcmIter divisible = div DIVISIBLE = DIV plus < lcmIter ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) -> true, rt in Omega(0) Induction Base: ge(gen_0':s17_27(0), gen_0':s17_27(0)) ->_R^Omega(0) true Induction Step: ge(gen_0':s17_27(+(n22_27, 1)), gen_0':s17_27(+(n22_27, 1))) ->_R^Omega(0) ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) ->_IH true We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (16) Obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 Lemmas: ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) -> true, rt in Omega(0) Generator Equations: gen_0':s17_27(0) <=> 0' gen_0':s17_27(+(x, 1)) <=> s(gen_0':s17_27(x)) gen_c15:c16:c1718_27(0) <=> c15 gen_c15:c16:c1718_27(+(x, 1)) <=> c17(gen_c15:c16:c1718_27(x)) gen_c8:c919_27(0) <=> c8 gen_c8:c919_27(+(x, 1)) <=> c9(gen_c8:c919_27(x)) gen_c22:c23:c2420_27(0) <=> c22(c20) gen_c22:c23:c2420_27(+(x, 1)) <=> c24(gen_c22:c23:c2420_27(x)) The following defined symbols remain to be analysed: GE, LCMITER, times, TIMES, divisible, DIVISIBLE, plus, PLUS, DIV, lcmIter, div They will be analysed ascendingly in the following order: GE < LCMITER divisible < LCMITER DIVISIBLE < LCMITER plus < LCMITER PLUS < LCMITER times < TIMES plus < times GE < TIMES PLUS < TIMES divisible < lcmIter divisible = div DIVISIBLE = DIV plus < lcmIter ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: GE(gen_0':s17_27(n604_27), gen_0':s17_27(n604_27)) -> gen_c15:c16:c1718_27(n604_27), rt in Omega(1 + n604_27) Induction Base: GE(gen_0':s17_27(0), gen_0':s17_27(0)) ->_R^Omega(1) c15 Induction Step: GE(gen_0':s17_27(+(n604_27, 1)), gen_0':s17_27(+(n604_27, 1))) ->_R^Omega(1) c17(GE(gen_0':s17_27(n604_27), gen_0':s17_27(n604_27))) ->_IH c17(gen_c15:c16:c1718_27(c605_27)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (18) Complex Obligation (BEST) ---------------------------------------- (19) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 Lemmas: ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) -> true, rt in Omega(0) Generator Equations: gen_0':s17_27(0) <=> 0' gen_0':s17_27(+(x, 1)) <=> s(gen_0':s17_27(x)) gen_c15:c16:c1718_27(0) <=> c15 gen_c15:c16:c1718_27(+(x, 1)) <=> c17(gen_c15:c16:c1718_27(x)) gen_c8:c919_27(0) <=> c8 gen_c8:c919_27(+(x, 1)) <=> c9(gen_c8:c919_27(x)) gen_c22:c23:c2420_27(0) <=> c22(c20) gen_c22:c23:c2420_27(+(x, 1)) <=> c24(gen_c22:c23:c2420_27(x)) The following defined symbols remain to be analysed: GE, LCMITER, times, TIMES, divisible, DIVISIBLE, plus, PLUS, DIV, lcmIter, div They will be analysed ascendingly in the following order: GE < LCMITER divisible < LCMITER DIVISIBLE < LCMITER plus < LCMITER PLUS < LCMITER times < TIMES plus < times GE < TIMES PLUS < TIMES divisible < lcmIter divisible = div DIVISIBLE = DIV plus < lcmIter ---------------------------------------- (20) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (21) BOUNDS(n^1, INF) ---------------------------------------- (22) Obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 Lemmas: ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) -> true, rt in Omega(0) GE(gen_0':s17_27(n604_27), gen_0':s17_27(n604_27)) -> gen_c15:c16:c1718_27(n604_27), rt in Omega(1 + n604_27) Generator Equations: gen_0':s17_27(0) <=> 0' gen_0':s17_27(+(x, 1)) <=> s(gen_0':s17_27(x)) gen_c15:c16:c1718_27(0) <=> c15 gen_c15:c16:c1718_27(+(x, 1)) <=> c17(gen_c15:c16:c1718_27(x)) gen_c8:c919_27(0) <=> c8 gen_c8:c919_27(+(x, 1)) <=> c9(gen_c8:c919_27(x)) gen_c22:c23:c2420_27(0) <=> c22(c20) gen_c22:c23:c2420_27(+(x, 1)) <=> c24(gen_c22:c23:c2420_27(x)) The following defined symbols remain to be analysed: plus, LCMITER, times, TIMES, divisible, DIVISIBLE, PLUS, DIV, lcmIter, div They will be analysed ascendingly in the following order: divisible < LCMITER DIVISIBLE < LCMITER plus < LCMITER PLUS < LCMITER times < TIMES plus < times PLUS < TIMES divisible < lcmIter divisible = div DIVISIBLE = DIV plus < lcmIter ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: plus(gen_0':s17_27(n1485_27), gen_0':s17_27(b)) -> gen_0':s17_27(+(n1485_27, b)), rt in Omega(0) Induction Base: plus(gen_0':s17_27(0), gen_0':s17_27(b)) ->_R^Omega(0) gen_0':s17_27(b) Induction Step: plus(gen_0':s17_27(+(n1485_27, 1)), gen_0':s17_27(b)) ->_R^Omega(0) s(plus(gen_0':s17_27(n1485_27), gen_0':s17_27(b))) ->_IH s(gen_0':s17_27(+(b, c1486_27))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (24) Obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 Lemmas: ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) -> true, rt in Omega(0) GE(gen_0':s17_27(n604_27), gen_0':s17_27(n604_27)) -> gen_c15:c16:c1718_27(n604_27), rt in Omega(1 + n604_27) plus(gen_0':s17_27(n1485_27), gen_0':s17_27(b)) -> gen_0':s17_27(+(n1485_27, b)), rt in Omega(0) Generator Equations: gen_0':s17_27(0) <=> 0' gen_0':s17_27(+(x, 1)) <=> s(gen_0':s17_27(x)) gen_c15:c16:c1718_27(0) <=> c15 gen_c15:c16:c1718_27(+(x, 1)) <=> c17(gen_c15:c16:c1718_27(x)) gen_c8:c919_27(0) <=> c8 gen_c8:c919_27(+(x, 1)) <=> c9(gen_c8:c919_27(x)) gen_c22:c23:c2420_27(0) <=> c22(c20) gen_c22:c23:c2420_27(+(x, 1)) <=> c24(gen_c22:c23:c2420_27(x)) The following defined symbols remain to be analysed: times, LCMITER, TIMES, divisible, DIVISIBLE, PLUS, DIV, lcmIter, div They will be analysed ascendingly in the following order: divisible < LCMITER DIVISIBLE < LCMITER PLUS < LCMITER times < TIMES PLUS < TIMES divisible < lcmIter divisible = div DIVISIBLE = DIV ---------------------------------------- (25) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: PLUS(gen_0':s17_27(n3404_27), gen_0':s17_27(b)) -> gen_c8:c919_27(n3404_27), rt in Omega(1 + n3404_27) Induction Base: PLUS(gen_0':s17_27(0), gen_0':s17_27(b)) ->_R^Omega(1) c8 Induction Step: PLUS(gen_0':s17_27(+(n3404_27, 1)), gen_0':s17_27(b)) ->_R^Omega(1) c9(PLUS(gen_0':s17_27(n3404_27), gen_0':s17_27(b))) ->_IH c9(gen_c8:c919_27(c3405_27)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (26) Obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 Lemmas: ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) -> true, rt in Omega(0) GE(gen_0':s17_27(n604_27), gen_0':s17_27(n604_27)) -> gen_c15:c16:c1718_27(n604_27), rt in Omega(1 + n604_27) plus(gen_0':s17_27(n1485_27), gen_0':s17_27(b)) -> gen_0':s17_27(+(n1485_27, b)), rt in Omega(0) PLUS(gen_0':s17_27(n3404_27), gen_0':s17_27(b)) -> gen_c8:c919_27(n3404_27), rt in Omega(1 + n3404_27) Generator Equations: gen_0':s17_27(0) <=> 0' gen_0':s17_27(+(x, 1)) <=> s(gen_0':s17_27(x)) gen_c15:c16:c1718_27(0) <=> c15 gen_c15:c16:c1718_27(+(x, 1)) <=> c17(gen_c15:c16:c1718_27(x)) gen_c8:c919_27(0) <=> c8 gen_c8:c919_27(+(x, 1)) <=> c9(gen_c8:c919_27(x)) gen_c22:c23:c2420_27(0) <=> c22(c20) gen_c22:c23:c2420_27(+(x, 1)) <=> c24(gen_c22:c23:c2420_27(x)) The following defined symbols remain to be analysed: TIMES, LCMITER, divisible, DIVISIBLE, DIV, lcmIter, div They will be analysed ascendingly in the following order: divisible < LCMITER DIVISIBLE < LCMITER divisible < lcmIter divisible = div DIVISIBLE = DIV ---------------------------------------- (27) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: DIV(gen_0':s17_27(n4879_27), gen_0':s17_27(1), gen_0':s17_27(n4879_27)) -> gen_c22:c23:c2420_27(n4879_27), rt in Omega(1 + n4879_27) Induction Base: DIV(gen_0':s17_27(0), gen_0':s17_27(1), gen_0':s17_27(0)) ->_R^Omega(1) c22(DIVISIBLE(gen_0':s17_27(0), gen_0':s17_27(1))) ->_R^Omega(1) c22(c20) Induction Step: DIV(gen_0':s17_27(+(n4879_27, 1)), gen_0':s17_27(1), gen_0':s17_27(+(n4879_27, 1))) ->_R^Omega(1) c24(DIV(gen_0':s17_27(n4879_27), gen_0':s17_27(1), gen_0':s17_27(n4879_27))) ->_IH c24(gen_c22:c23:c2420_27(c4880_27)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (28) Obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 Lemmas: ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) -> true, rt in Omega(0) GE(gen_0':s17_27(n604_27), gen_0':s17_27(n604_27)) -> gen_c15:c16:c1718_27(n604_27), rt in Omega(1 + n604_27) plus(gen_0':s17_27(n1485_27), gen_0':s17_27(b)) -> gen_0':s17_27(+(n1485_27, b)), rt in Omega(0) PLUS(gen_0':s17_27(n3404_27), gen_0':s17_27(b)) -> gen_c8:c919_27(n3404_27), rt in Omega(1 + n3404_27) DIV(gen_0':s17_27(n4879_27), gen_0':s17_27(1), gen_0':s17_27(n4879_27)) -> gen_c22:c23:c2420_27(n4879_27), rt in Omega(1 + n4879_27) Generator Equations: gen_0':s17_27(0) <=> 0' gen_0':s17_27(+(x, 1)) <=> s(gen_0':s17_27(x)) gen_c15:c16:c1718_27(0) <=> c15 gen_c15:c16:c1718_27(+(x, 1)) <=> c17(gen_c15:c16:c1718_27(x)) gen_c8:c919_27(0) <=> c8 gen_c8:c919_27(+(x, 1)) <=> c9(gen_c8:c919_27(x)) gen_c22:c23:c2420_27(0) <=> c22(c20) gen_c22:c23:c2420_27(+(x, 1)) <=> c24(gen_c22:c23:c2420_27(x)) The following defined symbols remain to be analysed: DIVISIBLE, LCMITER, divisible, lcmIter, div They will be analysed ascendingly in the following order: divisible < LCMITER DIVISIBLE < LCMITER divisible < lcmIter divisible = div DIVISIBLE = DIV ---------------------------------------- (29) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: div(gen_0':s17_27(n8087_27), gen_0':s17_27(b), gen_0':s17_27(+(1, n8087_27))) -> false, rt in Omega(0) Induction Base: div(gen_0':s17_27(0), gen_0':s17_27(b), gen_0':s17_27(+(1, 0))) ->_R^Omega(0) false Induction Step: div(gen_0':s17_27(+(n8087_27, 1)), gen_0':s17_27(b), gen_0':s17_27(+(1, +(n8087_27, 1)))) ->_R^Omega(0) div(gen_0':s17_27(n8087_27), gen_0':s17_27(b), gen_0':s17_27(+(1, n8087_27))) ->_IH false We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (30) Obligation: Innermost TRS: Rules: 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 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 Types: LCM :: 0':s -> 0':s -> c1 c1 :: c2:c3 -> c10 -> c1 LCMITER :: 0':s -> 0':s -> 0':s -> 0':s -> c2:c3 0' :: 0':s times :: 0':s -> 0':s -> 0':s TIMES :: 0':s -> 0':s -> c10 c2 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 IF :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c4:c5 or :: true:false -> true:false -> true:false ge :: 0':s -> 0':s -> true:false OR :: true:false -> true:false -> c18:c19 GE :: 0':s -> 0':s -> c15:c16:c17 c3 :: c4:c5 -> c18:c19 -> c15:c16:c17 -> c2:c3 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c6:c7 -> c20:c21 -> c4:c5 IF2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> c6:c7 divisible :: 0':s -> 0':s -> true:false DIVISIBLE :: 0':s -> 0':s -> c20:c21 c6 :: c6:c7 c7 :: c2:c3 -> c8:c9 -> c6:c7 plus :: 0':s -> 0':s -> 0':s PLUS :: 0':s -> 0':s -> c8:c9 c8 :: c8:c9 s :: 0':s -> 0':s c9 :: c8:c9 -> c8:c9 c10 :: c11:c12 -> c15:c16:c17 -> c10 IFTIMES :: true:false -> 0':s -> 0':s -> c11:c12 c11 :: c11:c12 c12 :: c8:c9 -> c10 -> c13:c14 -> c11:c12 p :: 0':s -> 0':s P :: 0':s -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 c15 :: c15:c16:c17 c16 :: c15:c16:c17 c17 :: c15:c16:c17 -> c15:c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21 c21 :: c22:c23:c24 -> c20:c21 DIV :: 0':s -> 0':s -> 0':s -> c22:c23:c24 c22 :: c20:c21 -> c22:c23:c24 c23 :: c22:c23:c24 c24 :: c22:c23:c24 -> c22:c23:c24 A :: c25:c26 c25 :: c25:c26 c26 :: c25:c26 lcm :: 0':s -> 0':s -> 0':s lcmIter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s if2 :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s ifTimes :: true:false -> 0':s -> 0':s -> 0':s div :: 0':s -> 0':s -> 0':s -> true:false a :: b:c b :: b:c c :: b:c hole_c11_27 :: c1 hole_0':s2_27 :: 0':s hole_c2:c33_27 :: c2:c3 hole_c104_27 :: c10 hole_c4:c55_27 :: c4:c5 hole_c18:c196_27 :: c18:c19 hole_c15:c16:c177_27 :: c15:c16:c17 hole_true:false8_27 :: true:false hole_c6:c79_27 :: c6:c7 hole_c20:c2110_27 :: c20:c21 hole_c8:c911_27 :: c8:c9 hole_c11:c1212_27 :: c11:c12 hole_c13:c1413_27 :: c13:c14 hole_c22:c23:c2414_27 :: c22:c23:c24 hole_c25:c2615_27 :: c25:c26 hole_b:c16_27 :: b:c gen_0':s17_27 :: Nat -> 0':s gen_c15:c16:c1718_27 :: Nat -> c15:c16:c17 gen_c8:c919_27 :: Nat -> c8:c9 gen_c22:c23:c2420_27 :: Nat -> c22:c23:c24 Lemmas: ge(gen_0':s17_27(n22_27), gen_0':s17_27(n22_27)) -> true, rt in Omega(0) GE(gen_0':s17_27(n604_27), gen_0':s17_27(n604_27)) -> gen_c15:c16:c1718_27(n604_27), rt in Omega(1 + n604_27) plus(gen_0':s17_27(n1485_27), gen_0':s17_27(b)) -> gen_0':s17_27(+(n1485_27, b)), rt in Omega(0) PLUS(gen_0':s17_27(n3404_27), gen_0':s17_27(b)) -> gen_c8:c919_27(n3404_27), rt in Omega(1 + n3404_27) DIV(gen_0':s17_27(n4879_27), gen_0':s17_27(1), gen_0':s17_27(n4879_27)) -> gen_c22:c23:c2420_27(n4879_27), rt in Omega(1 + n4879_27) div(gen_0':s17_27(n8087_27), gen_0':s17_27(b), gen_0':s17_27(+(1, n8087_27))) -> false, rt in Omega(0) Generator Equations: gen_0':s17_27(0) <=> 0' gen_0':s17_27(+(x, 1)) <=> s(gen_0':s17_27(x)) gen_c15:c16:c1718_27(0) <=> c15 gen_c15:c16:c1718_27(+(x, 1)) <=> c17(gen_c15:c16:c1718_27(x)) gen_c8:c919_27(0) <=> c8 gen_c8:c919_27(+(x, 1)) <=> c9(gen_c8:c919_27(x)) gen_c22:c23:c2420_27(0) <=> c22(c20) gen_c22:c23:c2420_27(+(x, 1)) <=> c24(gen_c22:c23:c2420_27(x)) The following defined symbols remain to be analysed: divisible, LCMITER, lcmIter They will be analysed ascendingly in the following order: divisible < LCMITER divisible < lcmIter divisible = div ---------------------------------------- (31) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (32) 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 ---------------------------------------- (33) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (34) 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 ---------------------------------------- (35) 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 ---------------------------------------- (36) 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 ---------------------------------------- (37) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (38) 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 ---------------------------------------- (39) 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 ---------------------------------------- (40) 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 ---------------------------------------- (41) 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 ---------------------------------------- (42) 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 ---------------------------------------- (43) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (44) 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 ---------------------------------------- (45) 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 } ---------------------------------------- (46) 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} ---------------------------------------- (47) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (48) 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} ---------------------------------------- (49) 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 ---------------------------------------- (50) 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] ---------------------------------------- (51) 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' ---------------------------------------- (52) 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] ---------------------------------------- (53) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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'') -{ 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] ---------------------------------------- (55) 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 ---------------------------------------- (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'') -{ 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] ---------------------------------------- (57) 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'' ---------------------------------------- (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'') -{ 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] ---------------------------------------- (59) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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 }-> 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] ---------------------------------------- (61) 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'' ---------------------------------------- (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 }-> 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''] ---------------------------------------- (63) 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' ---------------------------------------- (64) 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''] ---------------------------------------- (65) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (66) 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''] ---------------------------------------- (67) 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' ---------------------------------------- (68) 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'] ---------------------------------------- (69) 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 ---------------------------------------- (70) 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'] ---------------------------------------- (71) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (72) 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'] ---------------------------------------- (73) 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 ---------------------------------------- (74) 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] ---------------------------------------- (75) 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 ---------------------------------------- (76) 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] ---------------------------------------- (77) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (78) 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] ---------------------------------------- (79) 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'' ---------------------------------------- (80) 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''] ---------------------------------------- (81) 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 ---------------------------------------- (82) 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''] ---------------------------------------- (83) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (84) 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''] ---------------------------------------- (85) 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: ? ---------------------------------------- (86) 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 ---------------------------------------- (87) 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: ? ---------------------------------------- (88) 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 ---------------------------------------- (89) 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 ---------------------------------------- (90) 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 ---------------------------------------- (91) 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 ---------------------------------------- (92) 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. ---------------------------------------- (93) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (94) 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 ---------------------------------------- (95) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 14 trailing nodes: A -> c25 A -> c26 OR(true, z0) -> c18 P(0) -> c14 OR(false, z0) -> c19 PLUS(0, z0) -> c8 IFTIMES(true, z0, z1) -> c11 P(s(z0)) -> c13 IF2(true, z0, z1, z2, z3) -> c6 DIV(0, z0, s(z1)) -> c23 GE(z0, 0) -> c15 IF(true, z0, z1, z2, z3) -> c4 GE(0, s(z0)) -> c16 DIVISIBLE(0, s(z0)) -> c20 ---------------------------------------- (96) 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 ---------------------------------------- (97) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 5 trailing tuple parts ---------------------------------------- (98) 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 ---------------------------------------- (99) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (100) 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 ---------------------------------------- (101) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: LCM(z0, z1) -> c4(TIMES(z0, z1)) ---------------------------------------- (102) 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 ---------------------------------------- (103) 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))) ---------------------------------------- (104) 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 ---------------------------------------- (105) 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 ---------------------------------------- (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: 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 ---------------------------------------- (107) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (108) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: 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))) The (relative) TRS S consists of the following rules: LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) 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))) Rewrite Strategy: INNERMOST ---------------------------------------- (109) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (110) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: 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))) 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))) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (111) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (112) 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: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) [1] IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) [1] PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) [1] GE(s(z0), s(z1)) -> c17(GE(z0, z1)) [1] DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) [1] DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) [1] DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) [1] LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) [1] LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) [1] TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) [1] IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) [1] LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) [0] divisible(0, s(z0)) -> true [0] divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) [0] div(s(z0), z1, s(z2)) -> div(z0, z1, z2) [0] div(z0, z1, 0) -> divisible(z0, z1) [0] div(0, z0, s(z1)) -> false [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] or(true, z0) -> true [0] or(false, z0) -> z0 [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) [0] p(s(z0)) -> z0 [0] p(0) -> s(s(0)) [0] ifTimes(true, z0, z1) -> 0 [0] ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (113) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (114) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) [1] IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) [1] PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) [1] GE(s(z0), s(z1)) -> c17(GE(z0, z1)) [1] DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) [1] DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) [1] DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) [1] LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) [1] LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) [1] TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) [1] IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) [1] LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) [0] divisible(0, s(z0)) -> true [0] divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) [0] div(s(z0), z1, s(z2)) -> div(z0, z1, z2) [0] div(z0, z1, 0) -> divisible(z0, z1) [0] div(0, z0, s(z1)) -> false [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] or(true, z0) -> true [0] or(false, z0) -> z0 [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) [0] p(s(z0)) -> z0 [0] p(0) -> s(s(0)) [0] ifTimes(true, z0, z1) -> 0 [0] ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) [0] The TRS has the following type information: IF :: false:true -> s:0 -> s:0 -> s:0 -> s:0 -> c5 false :: false:true c5 :: c7 -> c21 -> c5 IF2 :: false:true -> s:0 -> s:0 -> s:0 -> s:0 -> c7 divisible :: s:0 -> s:0 -> false:true DIVISIBLE :: s:0 -> s:0 -> c21 c7 :: c2:c3 -> c9 -> c7 LCMITER :: s:0 -> s:0 -> s:0 -> s:0 -> c2:c3 plus :: s:0 -> s:0 -> s:0 PLUS :: s:0 -> s:0 -> c9 s :: s:0 -> s:0 c9 :: c9 -> c9 GE :: s:0 -> s:0 -> c17 c17 :: c17 -> c17 c21 :: c22:c24 -> c21 DIV :: s:0 -> s:0 -> s:0 -> c22:c24 0 :: s:0 c22 :: c21 -> c22:c24 c24 :: c22:c24 -> c22:c24 c2 :: c5 -> c2:c3 or :: false:true -> false:true -> false:true ge :: s:0 -> s:0 -> false:true c3 :: c5 -> c17 -> c2:c3 TIMES :: s:0 -> s:0 -> c10 c10 :: c12 -> c10 IFTIMES :: false:true -> s:0 -> s:0 -> c12 c12 :: c9 -> c10 -> c12 times :: s:0 -> s:0 -> s:0 p :: s:0 -> s:0 LCM :: s:0 -> s:0 -> c4 c4 :: c2:c3 -> c4 true :: false:true div :: s:0 -> s:0 -> s:0 -> false:true ifTimes :: false:true -> s:0 -> s:0 -> s:0 Rewrite Strategy: INNERMOST ---------------------------------------- (115) 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: IF_5 IF2_5 PLUS_2 GE_2 DIVISIBLE_2 DIV_3 LCMITER_4 TIMES_2 IFTIMES_3 (c) The following functions are completely defined: LCM_2 divisible_2 div_3 plus_2 or_2 ge_2 times_2 p_1 ifTimes_3 Due to the following rules being added: LCM(v0, v1) -> const9 [0] divisible(v0, v1) -> null_divisible [0] div(v0, v1, v2) -> null_div [0] plus(v0, v1) -> 0 [0] or(v0, v1) -> null_or [0] ge(v0, v1) -> null_ge [0] times(v0, v1) -> 0 [0] p(v0) -> 0 [0] ifTimes(v0, v1, v2) -> 0 [0] And the following fresh constants: const9, null_divisible, null_div, null_or, null_ge, const, const1, const2, const3, const4, const5, const6, const7, const8 ---------------------------------------- (116) 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: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) [1] IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) [1] PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) [1] GE(s(z0), s(z1)) -> c17(GE(z0, z1)) [1] DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) [1] DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) [1] DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) [1] LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) [1] LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) [1] TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) [1] IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) [1] LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) [0] divisible(0, s(z0)) -> true [0] divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) [0] div(s(z0), z1, s(z2)) -> div(z0, z1, z2) [0] div(z0, z1, 0) -> divisible(z0, z1) [0] div(0, z0, s(z1)) -> false [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] or(true, z0) -> true [0] or(false, z0) -> z0 [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) [0] p(s(z0)) -> z0 [0] p(0) -> s(s(0)) [0] ifTimes(true, z0, z1) -> 0 [0] ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) [0] LCM(v0, v1) -> const9 [0] divisible(v0, v1) -> null_divisible [0] div(v0, v1, v2) -> null_div [0] plus(v0, v1) -> 0 [0] or(v0, v1) -> null_or [0] ge(v0, v1) -> null_ge [0] times(v0, v1) -> 0 [0] p(v0) -> 0 [0] ifTimes(v0, v1, v2) -> 0 [0] The TRS has the following type information: IF :: false:true:null_divisible:null_div:null_or:null_ge -> s:0 -> s:0 -> s:0 -> s:0 -> c5 false :: false:true:null_divisible:null_div:null_or:null_ge c5 :: c7 -> c21 -> c5 IF2 :: false:true:null_divisible:null_div:null_or:null_ge -> s:0 -> s:0 -> s:0 -> s:0 -> c7 divisible :: s:0 -> s:0 -> false:true:null_divisible:null_div:null_or:null_ge DIVISIBLE :: s:0 -> s:0 -> c21 c7 :: c2:c3 -> c9 -> c7 LCMITER :: s:0 -> s:0 -> s:0 -> s:0 -> c2:c3 plus :: s:0 -> s:0 -> s:0 PLUS :: s:0 -> s:0 -> c9 s :: s:0 -> s:0 c9 :: c9 -> c9 GE :: s:0 -> s:0 -> c17 c17 :: c17 -> c17 c21 :: c22:c24 -> c21 DIV :: s:0 -> s:0 -> s:0 -> c22:c24 0 :: s:0 c22 :: c21 -> c22:c24 c24 :: c22:c24 -> c22:c24 c2 :: c5 -> c2:c3 or :: false:true:null_divisible:null_div:null_or:null_ge -> false:true:null_divisible:null_div:null_or:null_ge -> false:true:null_divisible:null_div:null_or:null_ge ge :: s:0 -> s:0 -> false:true:null_divisible:null_div:null_or:null_ge c3 :: c5 -> c17 -> c2:c3 TIMES :: s:0 -> s:0 -> c10 c10 :: c12 -> c10 IFTIMES :: false:true:null_divisible:null_div:null_or:null_ge -> s:0 -> s:0 -> c12 c12 :: c9 -> c10 -> c12 times :: s:0 -> s:0 -> s:0 p :: s:0 -> s:0 LCM :: s:0 -> s:0 -> c4:const9 c4 :: c2:c3 -> c4:const9 true :: false:true:null_divisible:null_div:null_or:null_ge div :: s:0 -> s:0 -> s:0 -> false:true:null_divisible:null_div:null_or:null_ge ifTimes :: false:true:null_divisible:null_div:null_or:null_ge -> s:0 -> s:0 -> s:0 const9 :: c4:const9 null_divisible :: false:true:null_divisible:null_div:null_or:null_ge null_div :: false:true:null_divisible:null_div:null_or:null_ge null_or :: false:true:null_divisible:null_div:null_or:null_ge null_ge :: false:true:null_divisible:null_div:null_or:null_ge const :: c5 const1 :: c7 const2 :: c21 const3 :: c2:c3 const4 :: c9 const5 :: c17 const6 :: c22:c24 const7 :: c10 const8 :: c12 Rewrite Strategy: INNERMOST ---------------------------------------- (117) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (118) 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: IF(false, z0, s(z0'), 0, z3) -> c5(IF2(true, z0, s(z0'), 0, z3), DIVISIBLE(0, s(z0'))) [1] IF(false, z0, s(z1'), s(z0''), z3) -> c5(IF2(div(s(z0''), s(z1'), s(z1')), z0, s(z1'), s(z0''), z3), DIVISIBLE(s(z0''), s(z1'))) [1] IF(false, z0, z1, z2, z3) -> c5(IF2(null_divisible, z0, z1, z2, z3), DIVISIBLE(z2, z1)) [1] IF2(false, 0, z1, z2, z3) -> c7(LCMITER(0, z1, z2, z3), PLUS(0, z2)) [1] IF2(false, s(z01), z1, z2, z3) -> c7(LCMITER(s(z01), z1, s(plus(z01, z2)), z3), PLUS(s(z01), z2)) [1] IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, 0, z3), PLUS(z0, z2)) [1] PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) [1] GE(s(z0), s(z1)) -> c17(GE(z0, z1)) [1] DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) [1] DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) [1] DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) [1] LCMITER(0, z1, z2, 0) -> c2(IF(or(true, true), 0, z1, z2, 0)) [1] LCMITER(0, z1, 0, s(z03)) -> c2(IF(or(true, false), 0, z1, 0, s(z03))) [1] LCMITER(0, z1, s(z04), s(z1'')) -> c2(IF(or(true, ge(z04, z1'')), 0, z1, s(z04), s(z1''))) [1] LCMITER(0, z1, z2, z3) -> c2(IF(or(true, null_ge), 0, z1, z2, z3)) [1] LCMITER(s(z02), z1, z2, 0) -> c2(IF(or(false, true), s(z02), z1, z2, 0)) [1] LCMITER(s(z02), z1, 0, s(z05)) -> c2(IF(or(false, false), s(z02), z1, 0, s(z05))) [1] LCMITER(s(z02), z1, s(z06), s(z11)) -> c2(IF(or(false, ge(z06, z11)), s(z02), z1, s(z06), s(z11))) [1] LCMITER(s(z02), z1, z2, z3) -> c2(IF(or(false, null_ge), s(z02), z1, z2, z3)) [1] LCMITER(z0, z1, z2, 0) -> c2(IF(or(null_ge, true), z0, z1, z2, 0)) [1] LCMITER(z0, z1, 0, s(z07)) -> c2(IF(or(null_ge, false), z0, z1, 0, s(z07))) [1] LCMITER(z0, z1, s(z08), s(z12)) -> c2(IF(or(null_ge, ge(z08, z12)), z0, z1, s(z08), s(z12))) [1] LCMITER(z0, z1, z2, z3) -> c2(IF(or(null_ge, null_ge), z0, z1, z2, z3)) [1] LCMITER(0, z1, z2, 0) -> c3(IF(or(true, true), 0, z1, z2, 0), GE(z2, 0)) [1] LCMITER(0, z1, 0, s(z010)) -> c3(IF(or(true, false), 0, z1, 0, s(z010)), GE(0, s(z010))) [1] LCMITER(0, z1, s(z011), s(z13)) -> c3(IF(or(true, ge(z011, z13)), 0, z1, s(z011), s(z13)), GE(s(z011), s(z13))) [1] LCMITER(0, z1, z2, z3) -> c3(IF(or(true, null_ge), 0, z1, z2, z3), GE(z2, z3)) [1] LCMITER(s(z09), z1, z2, 0) -> c3(IF(or(false, true), s(z09), z1, z2, 0), GE(z2, 0)) [1] LCMITER(s(z09), z1, 0, s(z012)) -> c3(IF(or(false, false), s(z09), z1, 0, s(z012)), GE(0, s(z012))) [1] LCMITER(s(z09), z1, s(z013), s(z14)) -> c3(IF(or(false, ge(z013, z14)), s(z09), z1, s(z013), s(z14)), GE(s(z013), s(z14))) [1] LCMITER(s(z09), z1, z2, z3) -> c3(IF(or(false, null_ge), s(z09), z1, z2, z3), GE(z2, z3)) [1] LCMITER(z0, z1, z2, 0) -> c3(IF(or(null_ge, true), z0, z1, z2, 0), GE(z2, 0)) [1] LCMITER(z0, z1, 0, s(z014)) -> c3(IF(or(null_ge, false), z0, z1, 0, s(z014)), GE(0, s(z014))) [1] LCMITER(z0, z1, s(z015), s(z15)) -> c3(IF(or(null_ge, ge(z015, z15)), z0, z1, s(z015), s(z15)), GE(s(z015), s(z15))) [1] LCMITER(z0, z1, z2, z3) -> c3(IF(or(null_ge, null_ge), z0, z1, z2, z3), GE(z2, z3)) [1] TIMES(0, z1) -> c10(IFTIMES(true, 0, z1)) [1] TIMES(s(z016), z1) -> c10(IFTIMES(false, s(z016), z1)) [1] TIMES(z0, z1) -> c10(IFTIMES(null_ge, z0, z1)) [1] IFTIMES(false, s(z017), z1) -> c12(PLUS(z1, times(z1, z017)), TIMES(z1, z017)) [1] IFTIMES(false, s(z017), z1) -> c12(PLUS(z1, times(z1, z017)), TIMES(z1, 0)) [1] IFTIMES(false, 0, z1) -> c12(PLUS(z1, times(z1, s(s(0)))), TIMES(z1, s(s(0)))) [1] IFTIMES(false, 0, z1) -> c12(PLUS(z1, times(z1, s(s(0)))), TIMES(z1, 0)) [1] IFTIMES(false, s(z018), z1) -> c12(PLUS(z1, times(z1, 0)), TIMES(z1, z018)) [1] IFTIMES(false, 0, z1) -> c12(PLUS(z1, times(z1, 0)), TIMES(z1, s(s(0)))) [1] IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, 0)), TIMES(z1, 0)) [1] LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1))) [0] LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, 0)) [0] divisible(0, s(z0)) -> true [0] divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) [0] div(s(z0), z1, s(z2)) -> div(z0, z1, z2) [0] div(z0, z1, 0) -> divisible(z0, z1) [0] div(0, z0, s(z1)) -> false [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] or(true, z0) -> true [0] or(false, z0) -> z0 [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] times(0, z1) -> ifTimes(true, 0, z1) [0] times(s(z019), z1) -> ifTimes(false, s(z019), z1) [0] times(z0, z1) -> ifTimes(null_ge, z0, z1) [0] p(s(z0)) -> z0 [0] p(0) -> s(s(0)) [0] ifTimes(true, z0, z1) -> 0 [0] ifTimes(false, s(z020), z1) -> plus(z1, times(z1, z020)) [0] ifTimes(false, 0, z1) -> plus(z1, times(z1, s(s(0)))) [0] ifTimes(false, z0, z1) -> plus(z1, times(z1, 0)) [0] LCM(v0, v1) -> const9 [0] divisible(v0, v1) -> null_divisible [0] div(v0, v1, v2) -> null_div [0] plus(v0, v1) -> 0 [0] or(v0, v1) -> null_or [0] ge(v0, v1) -> null_ge [0] times(v0, v1) -> 0 [0] p(v0) -> 0 [0] ifTimes(v0, v1, v2) -> 0 [0] The TRS has the following type information: IF :: false:true:null_divisible:null_div:null_or:null_ge -> s:0 -> s:0 -> s:0 -> s:0 -> c5 false :: false:true:null_divisible:null_div:null_or:null_ge c5 :: c7 -> c21 -> c5 IF2 :: false:true:null_divisible:null_div:null_or:null_ge -> s:0 -> s:0 -> s:0 -> s:0 -> c7 divisible :: s:0 -> s:0 -> false:true:null_divisible:null_div:null_or:null_ge DIVISIBLE :: s:0 -> s:0 -> c21 c7 :: c2:c3 -> c9 -> c7 LCMITER :: s:0 -> s:0 -> s:0 -> s:0 -> c2:c3 plus :: s:0 -> s:0 -> s:0 PLUS :: s:0 -> s:0 -> c9 s :: s:0 -> s:0 c9 :: c9 -> c9 GE :: s:0 -> s:0 -> c17 c17 :: c17 -> c17 c21 :: c22:c24 -> c21 DIV :: s:0 -> s:0 -> s:0 -> c22:c24 0 :: s:0 c22 :: c21 -> c22:c24 c24 :: c22:c24 -> c22:c24 c2 :: c5 -> c2:c3 or :: false:true:null_divisible:null_div:null_or:null_ge -> false:true:null_divisible:null_div:null_or:null_ge -> false:true:null_divisible:null_div:null_or:null_ge ge :: s:0 -> s:0 -> false:true:null_divisible:null_div:null_or:null_ge c3 :: c5 -> c17 -> c2:c3 TIMES :: s:0 -> s:0 -> c10 c10 :: c12 -> c10 IFTIMES :: false:true:null_divisible:null_div:null_or:null_ge -> s:0 -> s:0 -> c12 c12 :: c9 -> c10 -> c12 times :: s:0 -> s:0 -> s:0 p :: s:0 -> s:0 LCM :: s:0 -> s:0 -> c4:const9 c4 :: c2:c3 -> c4:const9 true :: false:true:null_divisible:null_div:null_or:null_ge div :: s:0 -> s:0 -> s:0 -> false:true:null_divisible:null_div:null_or:null_ge ifTimes :: false:true:null_divisible:null_div:null_or:null_ge -> s:0 -> s:0 -> s:0 const9 :: c4:const9 null_divisible :: false:true:null_divisible:null_div:null_or:null_ge null_div :: false:true:null_divisible:null_div:null_or:null_ge null_or :: false:true:null_divisible:null_div:null_or:null_ge null_ge :: false:true:null_divisible:null_div:null_or:null_ge const :: c5 const1 :: c7 const2 :: c21 const3 :: c2:c3 const4 :: c9 const5 :: c17 const6 :: c22:c24 const7 :: c10 const8 :: c12 Rewrite Strategy: INNERMOST ---------------------------------------- (119) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: false => 1 0 => 0 true => 2 const9 => 0 null_divisible => 0 null_div => 0 null_or => 0 null_ge => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 const4 => 0 const5 => 0 const6 => 0 const7 => 0 const8 => 0 ---------------------------------------- (120) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z0, z1) :|: z'' = 0, z = z0, z1 >= 0, z' = z1, z0 >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z0, z1, z2) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0, z'' = 1 + z2, z2 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + z0, 1 + z1, 1 + z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 GE(z, z') -{ 1 }-> 1 + GE(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + z0'', 1 + z1', 1 + z1'), z0, 1 + z1', 1 + z0'', z3) + DIVISIBLE(1 + z0'', 1 + z1') :|: z = 1, z'' = 1 + z1', z4 = 1 + z0'', z1' >= 0, z0 >= 0, z5 = z3, z0'' >= 0, z' = z0, z3 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z0, 1 + z0', 0, z3) + DIVISIBLE(0, 1 + z0') :|: z4 = 0, z = 1, z0' >= 0, z0 >= 0, z'' = 1 + z0', z5 = z3, z' = z0, z3 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z0, z1, z2, z3) + DIVISIBLE(z2, z1) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z3, z' = z0, z2 >= 0, z3 >= 0, z'' = z1, z4 = z2 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(z0, z1, 0, z3) + PLUS(z0, z2) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z3, z' = z0, z2 >= 0, z3 >= 0, z'' = z1, z4 = z2 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z1, z2, z3) + PLUS(0, z2) :|: z1 >= 0, z = 1, z5 = z3, z2 >= 0, z3 >= 0, z' = 0, z'' = z1, z4 = z2 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(1 + z01, z1, 1 + plus(z01, z2), z3) + PLUS(1 + z01, z2) :|: z1 >= 0, z01 >= 0, z = 1, z' = 1 + z01, z5 = z3, z2 >= 0, z3 >= 0, z'' = z1, z4 = z2 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, z017)) + TIMES(z1, z017) :|: z1 >= 0, z = 1, z' = 1 + z017, z017 >= 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, z017)) + TIMES(z1, 0) :|: z1 >= 0, z = 1, z' = 1 + z017, z017 >= 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 0)) + TIMES(z1, z018) :|: z1 >= 0, z = 1, z' = 1 + z018, z018 >= 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 0)) + TIMES(z1, 0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 0)) + TIMES(z1, 1 + (1 + 0)) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 1 + (1 + 0))) + TIMES(z1, 0) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 1 + (1 + 0))) + TIMES(z1, 1 + (1 + 0)) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 LCM(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 LCM(z, z') -{ 0 }-> 1 + LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z0, z1, 0, 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z04, z1'')), 0, z1, 1 + z04, 1 + z1'') :|: z'' = 1 + z04, z04 >= 0, z1 >= 0, z' = z1, z4 = 1 + z1'', z = 0, z1'' >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, 2), 0, z1, z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 0, z2 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, 1), 0, z1, 0, 1 + z03) :|: z'' = 0, z1 >= 0, z4 = 1 + z03, z' = z1, z03 >= 0, z = 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, 0), 0, z1, z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 0, z4 = z3, z2 >= 0, z3 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z06, z11)), 1 + z02, z1, 1 + z06, 1 + z11) :|: z'' = 1 + z06, z1 >= 0, z11 >= 0, z = 1 + z02, z4 = 1 + z11, z02 >= 0, z06 >= 0, z' = z1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, 2), 1 + z02, z1, z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z = 1 + z02, z02 >= 0, z' = z1, z2 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, 1), 1 + z02, z1, 0, 1 + z05) :|: z'' = 0, z1 >= 0, z = 1 + z02, z4 = 1 + z05, z02 >= 0, z' = z1, z05 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, 0), 1 + z02, z1, z2, z3) :|: z'' = z2, z1 >= 0, z = 1 + z02, z02 >= 0, z' = z1, z4 = z3, z2 >= 0, z3 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z08, z12)), z0, z1, 1 + z08, 1 + z12) :|: z08 >= 0, z = z0, z1 >= 0, z'' = 1 + z08, z4 = 1 + z12, z' = z1, z0 >= 0, z12 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, 2), z0, z1, z2, 0) :|: z'' = z2, z = z0, z4 = 0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, 1), z0, z1, 0, 1 + z07) :|: z'' = 0, z4 = 1 + z07, z = z0, z1 >= 0, z07 >= 0, z' = z1, z0 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, 0), z0, z1, z2, z3) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z4 = z3, z2 >= 0, z3 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z011, z13)), 0, z1, 1 + z011, 1 + z13) + GE(1 + z011, 1 + z13) :|: z1 >= 0, z011 >= 0, z'' = 1 + z011, z4 = 1 + z13, z' = z1, z = 0, z13 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, 2), 0, z1, z2, 0) + GE(z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 0, z2 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, 1), 0, z1, 0, 1 + z010) + GE(0, 1 + z010) :|: z'' = 0, z1 >= 0, z4 = 1 + z010, z' = z1, z = 0, z010 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, 0), 0, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 0, z4 = z3, z2 >= 0, z3 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z013, z14)), 1 + z09, z1, 1 + z013, 1 + z14) + GE(1 + z013, 1 + z14) :|: z1 >= 0, z'' = 1 + z013, z013 >= 0, z' = z1, z4 = 1 + z14, z = 1 + z09, z09 >= 0, z14 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, 2), 1 + z09, z1, z2, 0) + GE(z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 1 + z09, z09 >= 0, z2 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, 1), 1 + z09, z1, 0, 1 + z012) + GE(0, 1 + z012) :|: z'' = 0, z1 >= 0, z4 = 1 + z012, z' = z1, z012 >= 0, z = 1 + z09, z09 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, 0), 1 + z09, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 1 + z09, z09 >= 0, z4 = z3, z2 >= 0, z3 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z015, z15)), z0, z1, 1 + z015, 1 + z15) + GE(1 + z015, 1 + z15) :|: z'' = 1 + z015, z = z0, z1 >= 0, z015 >= 0, z15 >= 0, z' = z1, z0 >= 0, z4 = 1 + z15 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, 2), z0, z1, z2, 0) + GE(z2, 0) :|: z'' = z2, z = z0, z4 = 0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, 1), z0, z1, 0, 1 + z014) + GE(0, 1 + z014) :|: z'' = 0, z = z0, z1 >= 0, z4 = 1 + z014, z014 >= 0, z' = z1, z0 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, 0), z0, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z4 = z3, z2 >= 0, z3 >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z1) :|: z1 >= 0, z' = z1, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + z016, z1) :|: z1 >= 0, z = 1 + z016, z' = z1, z016 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 div(z, z', z'') -{ 0 }-> divisible(z0, z1) :|: z'' = 0, z = z0, z1 >= 0, z' = z1, z0 >= 0 div(z, z', z'') -{ 0 }-> div(z0, z1, z2) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0, z'' = 1 + z2, z2 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z'' = 1 + z1, z = 0, z' = z0 div(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 divisible(z, z') -{ 0 }-> div(1 + z0, 1 + z1, 1 + z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 divisible(z, z') -{ 0 }-> 2 :|: z0 >= 0, z' = 1 + z0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ge(z, z') -{ 0 }-> ge(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 ge(z, z') -{ 0 }-> 2 :|: z = z0, z0 >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z0 >= 0, z' = 1 + z0, z = 0 ge(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ifTimes(z, z', z'') -{ 0 }-> plus(z1, times(z1, z020)) :|: z1 >= 0, z = 1, z' = 1 + z020, z020 >= 0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> plus(z1, times(z1, 0)) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z1 >= 0, z0 >= 0, z' = z0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 or(z, z') -{ 0 }-> z0 :|: z = 1, z0 >= 0, z' = z0 or(z, z') -{ 0 }-> 2 :|: z = 2, z0 >= 0, z' = z0 or(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 p(z) -{ 0 }-> z0 :|: z = 1 + z0, z0 >= 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> 1 + plus(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z1) :|: z1 >= 0, z' = z1, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + z019, z1) :|: z019 >= 0, z1 >= 0, z = 1 + z019, z' = z1 times(z, z') -{ 0 }-> ifTimes(0, z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ---------------------------------------- (121) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: or(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 or(z, z') -{ 0 }-> 2 :|: z = 2, z0 >= 0, z' = z0 or(z, z') -{ 0 }-> z0 :|: z = 1, z0 >= 0, z' = z0 ---------------------------------------- (122) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z0, z1) :|: z'' = 0, z = z0, z1 >= 0, z' = z1, z0 >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z0, z1, z2) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0, z'' = 1 + z2, z2 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + z0, 1 + z1, 1 + z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 GE(z, z') -{ 1 }-> 1 + GE(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + z0'', 1 + z1', 1 + z1'), z0, 1 + z1', 1 + z0'', z3) + DIVISIBLE(1 + z0'', 1 + z1') :|: z = 1, z'' = 1 + z1', z4 = 1 + z0'', z1' >= 0, z0 >= 0, z5 = z3, z0'' >= 0, z' = z0, z3 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z0, 1 + z0', 0, z3) + DIVISIBLE(0, 1 + z0') :|: z4 = 0, z = 1, z0' >= 0, z0 >= 0, z'' = 1 + z0', z5 = z3, z' = z0, z3 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z0, z1, z2, z3) + DIVISIBLE(z2, z1) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z3, z' = z0, z2 >= 0, z3 >= 0, z'' = z1, z4 = z2 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(z0, z1, 0, z3) + PLUS(z0, z2) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z3, z' = z0, z2 >= 0, z3 >= 0, z'' = z1, z4 = z2 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z1, z2, z3) + PLUS(0, z2) :|: z1 >= 0, z = 1, z5 = z3, z2 >= 0, z3 >= 0, z' = 0, z'' = z1, z4 = z2 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(1 + z01, z1, 1 + plus(z01, z2), z3) + PLUS(1 + z01, z2) :|: z1 >= 0, z01 >= 0, z = 1, z' = 1 + z01, z5 = z3, z2 >= 0, z3 >= 0, z'' = z1, z4 = z2 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, z017)) + TIMES(z1, z017) :|: z1 >= 0, z = 1, z' = 1 + z017, z017 >= 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, z017)) + TIMES(z1, 0) :|: z1 >= 0, z = 1, z' = 1 + z017, z017 >= 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 0)) + TIMES(z1, z018) :|: z1 >= 0, z = 1, z' = 1 + z018, z018 >= 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 0)) + TIMES(z1, 0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 0)) + TIMES(z1, 1 + (1 + 0)) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 1 + (1 + 0))) + TIMES(z1, 0) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, 1 + (1 + 0))) + TIMES(z1, 1 + (1 + 0)) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 LCM(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 LCM(z, z') -{ 0 }-> 1 + LCMITER(z0, z1, 0, ifTimes(ge(0, z0), z0, z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z0, z1, 0, 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + z02, z1, z2, z3) :|: z'' = z2, z1 >= 0, z = 1 + z02, z02 >= 0, z' = z1, z4 = z3, z2 >= 0, z3 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + z02, z1, z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z = 1 + z02, z02 >= 0, z' = z1, z2 >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + z02, z1, 0, 1 + z05) :|: z'' = 0, z1 >= 0, z = 1 + z02, z4 = 1 + z05, z02 >= 0, z' = z1, z05 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z04, z1'')), 0, z1, 1 + z04, 1 + z1'') :|: z'' = 1 + z04, z04 >= 0, z1 >= 0, z' = z1, z4 = 1 + z1'', z = 0, z1'' >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z06, z11)), 1 + z02, z1, 1 + z06, 1 + z11) :|: z'' = 1 + z06, z1 >= 0, z11 >= 0, z = 1 + z02, z4 = 1 + z11, z02 >= 0, z06 >= 0, z' = z1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z08, z12)), z0, z1, 1 + z08, 1 + z12) :|: z08 >= 0, z = z0, z1 >= 0, z'' = 1 + z08, z4 = 1 + z12, z' = z1, z0 >= 0, z12 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z1, z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 0, z4 = z3, z2 >= 0, z3 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z1, z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 0, z2 >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z1, 0, 1 + z03) :|: z'' = 0, z1 >= 0, z4 = 1 + z03, z' = z1, z03 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z0, z1, z2, z3) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z4 = z3, z2 >= 0, z3 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z0, z1, z2, 0) :|: z'' = z2, z = z0, z4 = 0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z0, z1, 0, 1 + z07) :|: z'' = 0, z4 = 1 + z07, z = z0, z1 >= 0, z07 >= 0, z' = z1, z0 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z1, z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 0, z4 = z3, z2 >= 0, z3 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z1, z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 0, z2 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z1, 0, 1 + z03) :|: z'' = 0, z1 >= 0, z4 = 1 + z03, z' = z1, z03 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + z02, z1, z2, z3) :|: z'' = z2, z1 >= 0, z = 1 + z02, z02 >= 0, z' = z1, z4 = z3, z2 >= 0, z3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + z02, z1, z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z = 1 + z02, z02 >= 0, z' = z1, z2 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + z02, z1, 0, 1 + z05) :|: z'' = 0, z1 >= 0, z = 1 + z02, z4 = 1 + z05, z02 >= 0, z' = z1, z05 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + z09, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 1 + z09, z09 >= 0, z4 = z3, z2 >= 0, z3 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + z09, z1, z2, 0) + GE(z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 1 + z09, z09 >= 0, z2 >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + z09, z1, 0, 1 + z012) + GE(0, 1 + z012) :|: z'' = 0, z1 >= 0, z4 = 1 + z012, z' = z1, z012 >= 0, z = 1 + z09, z09 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z011, z13)), 0, z1, 1 + z011, 1 + z13) + GE(1 + z011, 1 + z13) :|: z1 >= 0, z011 >= 0, z'' = 1 + z011, z4 = 1 + z13, z' = z1, z = 0, z13 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z013, z14)), 1 + z09, z1, 1 + z013, 1 + z14) + GE(1 + z013, 1 + z14) :|: z1 >= 0, z'' = 1 + z013, z013 >= 0, z' = z1, z4 = 1 + z14, z = 1 + z09, z09 >= 0, z14 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z015, z15)), z0, z1, 1 + z015, 1 + z15) + GE(1 + z015, 1 + z15) :|: z'' = 1 + z015, z = z0, z1 >= 0, z015 >= 0, z15 >= 0, z' = z1, z0 >= 0, z4 = 1 + z15 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 0, z4 = z3, z2 >= 0, z3 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z1, z2, 0) + GE(z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 0, z2 >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z1, 0, 1 + z010) + GE(0, 1 + z010) :|: z'' = 0, z1 >= 0, z4 = 1 + z010, z' = z1, z = 0, z010 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z0, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z4 = z3, z2 >= 0, z3 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z0, z1, z2, 0) + GE(z2, 0) :|: z'' = z2, z = z0, z4 = 0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z0, z1, 0, 1 + z014) + GE(0, 1 + z014) :|: z'' = 0, z = z0, z1 >= 0, z4 = 1 + z014, z014 >= 0, z' = z1, z0 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 0, z4 = z3, z2 >= 0, z3 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z1, z2, 0) + GE(z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 0, z2 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z1, 0, 1 + z010) + GE(0, 1 + z010) :|: z'' = 0, z1 >= 0, z4 = 1 + z010, z' = z1, z = 0, z010 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + z09, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z1 >= 0, z' = z1, z = 1 + z09, z09 >= 0, z4 = z3, z2 >= 0, z3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + z09, z1, z2, 0) + GE(z2, 0) :|: z'' = z2, z4 = 0, z1 >= 0, z' = z1, z = 1 + z09, z09 >= 0, z2 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + z09, z1, 0, 1 + z012) + GE(0, 1 + z012) :|: z'' = 0, z1 >= 0, z4 = 1 + z012, z' = z1, z012 >= 0, z = 1 + z09, z09 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z1) :|: z1 >= 0, z' = z1, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + z016, z1) :|: z1 >= 0, z = 1 + z016, z' = z1, z016 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 div(z, z', z'') -{ 0 }-> divisible(z0, z1) :|: z'' = 0, z = z0, z1 >= 0, z' = z1, z0 >= 0 div(z, z', z'') -{ 0 }-> div(z0, z1, z2) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0, z'' = 1 + z2, z2 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z'' = 1 + z1, z = 0, z' = z0 div(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 divisible(z, z') -{ 0 }-> div(1 + z0, 1 + z1, 1 + z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 divisible(z, z') -{ 0 }-> 2 :|: z0 >= 0, z' = 1 + z0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ge(z, z') -{ 0 }-> ge(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 ge(z, z') -{ 0 }-> 2 :|: z = z0, z0 >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z0 >= 0, z' = 1 + z0, z = 0 ge(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ifTimes(z, z', z'') -{ 0 }-> plus(z1, times(z1, z020)) :|: z1 >= 0, z = 1, z' = 1 + z020, z020 >= 0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> plus(z1, times(z1, 0)) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> plus(z1, times(z1, 1 + (1 + 0))) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z1 >= 0, z0 >= 0, z' = z0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 or(z, z') -{ 0 }-> z0 :|: z = 1, z0 >= 0, z' = z0 or(z, z') -{ 0 }-> 2 :|: z = 2, z0 >= 0, z' = z0 or(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 p(z) -{ 0 }-> z0 :|: z = 1 + z0, z0 >= 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> 1 + plus(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z1) :|: z1 >= 0, z' = z1, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + z019, z1) :|: z019 >= 0, z1 >= 0, z = 1 + z019, z' = z1 times(z, z') -{ 0 }-> ifTimes(0, z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ---------------------------------------- (123) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (124) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + (z4 - 1), 1 + (z'' - 1), 1 + (z'' - 1)), z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(z', z'', 0, z5) + PLUS(z', z4) :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + PLUS(0, z4) :|: z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + PLUS(1 + (z' - 1), z4) :|: z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> divisible(z, z') :|: z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> div(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> div(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ---------------------------------------- (125) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { PLUS } { div, divisible } { DIVISIBLE, DIV } { ge } { plus } { p } { GE } { or } { IF2, LCMITER, IF } { ifTimes, times } { LCM } { TIMES, IFTIMES } ---------------------------------------- (126) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + (z4 - 1), 1 + (z'' - 1), 1 + (z'' - 1)), z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(z', z'', 0, z5) + PLUS(z', z4) :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + PLUS(0, z4) :|: z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + PLUS(1 + (z' - 1), z4) :|: z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> divisible(z, z') :|: z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> div(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> div(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {PLUS}, {div,divisible}, {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} ---------------------------------------- (127) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (128) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + (z4 - 1), 1 + (z'' - 1), 1 + (z'' - 1)), z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(z', z'', 0, z5) + PLUS(z', z4) :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + PLUS(0, z4) :|: z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + PLUS(1 + (z' - 1), z4) :|: z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> divisible(z, z') :|: z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> div(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> div(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {PLUS}, {div,divisible}, {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} ---------------------------------------- (129) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: PLUS after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (130) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + (z4 - 1), 1 + (z'' - 1), 1 + (z'' - 1)), z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(z', z'', 0, z5) + PLUS(z', z4) :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + PLUS(0, z4) :|: z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + PLUS(1 + (z' - 1), z4) :|: z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> divisible(z, z') :|: z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> div(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> div(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {PLUS}, {div,divisible}, {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: ?, size: O(1) [0] ---------------------------------------- (131) 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: z ---------------------------------------- (132) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + (z4 - 1), 1 + (z'' - 1), 1 + (z'' - 1)), z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(z', z'', 0, z5) + PLUS(z', z4) :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + PLUS(0, z4) :|: z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + PLUS(1 + (z' - 1), z4) :|: z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> divisible(z, z') :|: z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> div(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> div(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {div,divisible}, {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (133) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (134) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + (z4 - 1), 1 + (z'' - 1), 1 + (z'' - 1)), z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> divisible(z, z') :|: z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> div(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> div(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {div,divisible}, {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (135) 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 ---------------------------------------- (136) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + (z4 - 1), 1 + (z'' - 1), 1 + (z'' - 1)), z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> divisible(z, z') :|: z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> div(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> div(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {div,divisible}, {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: ?, size: O(1) [2] divisible: runtime: ?, size: O(1) [2] ---------------------------------------- (137) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: div after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: divisible after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (138) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(div(1 + (z4 - 1), 1 + (z'' - 1), 1 + (z'' - 1)), z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> divisible(z, z') :|: z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> div(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> div(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (139) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (140) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (141) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: DIVISIBLE after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: DIV after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z'' ---------------------------------------- (142) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {DIVISIBLE,DIV}, {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: ?, size: O(1) [0] DIV: runtime: ?, size: O(n^1) [1 + z''] ---------------------------------------- (143) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: DIVISIBLE after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7*z Computed RUNTIME bound using KoAT for: DIV after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + 7*z + z'' ---------------------------------------- (144) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z, z') :|: z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z - 1, z', z'' - 1) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + (z - 1), 1 + (z' - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + DIVISIBLE(1 + (z4 - 1), 1 + (z'' - 1)) :|: s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + DIVISIBLE(0, 1 + (z'' - 1)) :|: z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(0, z', z'', z4, z5) + DIVISIBLE(z4, z'') :|: z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ---------------------------------------- (145) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (146) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ---------------------------------------- (147) 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 ---------------------------------------- (148) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {ge}, {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: ?, size: O(1) [2] ---------------------------------------- (149) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: ge after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (150) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(ge(0, z), z, z')) :|: z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, ge(z'' - 1, z4 - 1)), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, ge(z'' - 1, z4 - 1)), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, ge(z'' - 1, z4 - 1)), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (151) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (152) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (153) 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' ---------------------------------------- (154) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (155) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (156) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + plus(z' - 1, z4), z5) + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] ---------------------------------------- (157) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (158) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] ---------------------------------------- (159) 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 ---------------------------------------- (160) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {p}, {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (161) 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: 0 ---------------------------------------- (162) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (163) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (164) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (165) 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: 0 ---------------------------------------- (166) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {GE}, {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: ?, size: O(1) [0] ---------------------------------------- (167) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: GE after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (168) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + GE(1 + (z'' - 1), 1 + (z4 - 1)) :|: s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) + GE(z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + GE(z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + GE(z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + GE(0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] ---------------------------------------- (169) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (170) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ z' }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + s36 :|: s36 >= 0, s36 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + s31 :|: s31 >= 0, s31 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s33 :|: s33 >= 0, s33 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s27 :|: s27 >= 0, s27 <= 0, s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + s34 :|: s34 >= 0, s34 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s39 :|: s39 >= 0, s39 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', z'', z4) + s29 :|: s29 >= 0, s29 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + s24 :|: s24 >= 0, s24 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + s26 :|: s26 >= 0, s26 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', z'', z4) + s40 :|: s40 >= 0, s40 <= 0, z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + s37 :|: s37 >= 0, s37 <= 0, z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + s38 :|: s38 >= 0, s38 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', z'', z4) + s28 :|: s28 >= 0, s28 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + s23 :|: s23 >= 0, s23 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + s25 :|: s25 >= 0, s25 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + s35 :|: s35 >= 0, s35 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + s30 :|: s30 >= 0, s30 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s32 :|: s32 >= 0, s32 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] ---------------------------------------- (171) 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' ---------------------------------------- (172) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ z' }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + s36 :|: s36 >= 0, s36 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + s31 :|: s31 >= 0, s31 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s33 :|: s33 >= 0, s33 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s27 :|: s27 >= 0, s27 <= 0, s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + s34 :|: s34 >= 0, s34 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s39 :|: s39 >= 0, s39 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', z'', z4) + s29 :|: s29 >= 0, s29 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + s24 :|: s24 >= 0, s24 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + s26 :|: s26 >= 0, s26 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', z'', z4) + s40 :|: s40 >= 0, s40 <= 0, z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + s37 :|: s37 >= 0, s37 <= 0, z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + s38 :|: s38 >= 0, s38 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', z'', z4) + s28 :|: s28 >= 0, s28 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + s23 :|: s23 >= 0, s23 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + s25 :|: s25 >= 0, s25 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + s35 :|: s35 >= 0, s35 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + s30 :|: s30 >= 0, s30 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s32 :|: s32 >= 0, s32 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {or}, {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] or: runtime: ?, size: O(n^1) [2 + z'] ---------------------------------------- (173) 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: 0 ---------------------------------------- (174) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ z' }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(2, s14), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(1, s15), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(0, s16), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + s36 :|: s36 >= 0, s36 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + s31 :|: s31 >= 0, s31 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s33 :|: s33 >= 0, s33 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(2, s17), 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s27 :|: s27 >= 0, s27 <= 0, s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(1, s18), 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + s34 :|: s34 >= 0, s34 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(or(0, s19), z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s39 :|: s39 >= 0, s39 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', z'', z4) + s29 :|: s29 >= 0, s29 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + s24 :|: s24 >= 0, s24 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + s26 :|: s26 >= 0, s26 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', z'', z4) + s40 :|: s40 >= 0, s40 <= 0, z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + s37 :|: s37 >= 0, s37 <= 0, z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + s38 :|: s38 >= 0, s38 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', z'', z4) + s28 :|: s28 >= 0, s28 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + s23 :|: s23 >= 0, s23 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + s25 :|: s25 >= 0, s25 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + s35 :|: s35 >= 0, s35 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + s30 :|: s30 >= 0, s30 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s32 :|: s32 >= 0, s32 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] or: runtime: O(1) [0], size: O(n^1) [2 + z'] ---------------------------------------- (175) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (176) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ z' }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s41, 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s41 >= 0, s41 <= s14 + 2, s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s42, 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s42 >= 0, s42 <= s15 + 2, s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s43, z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s43 >= 0, s43 <= s16 + 2, s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s44, 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s27 :|: s44 >= 0, s44 <= s17 + 2, s27 >= 0, s27 <= 0, s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s45, 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + s34 :|: s45 >= 0, s45 <= s18 + 2, s34 >= 0, s34 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s46, z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s39 :|: s46 >= 0, s46 <= s19 + 2, s39 >= 0, s39 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + s36 :|: s36 >= 0, s36 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + s31 :|: s31 >= 0, s31 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s33 :|: s33 >= 0, s33 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', z'', z4) + s29 :|: s29 >= 0, s29 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + s24 :|: s24 >= 0, s24 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + s26 :|: s26 >= 0, s26 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', z'', z4) + s40 :|: s40 >= 0, s40 <= 0, z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + s37 :|: s37 >= 0, s37 <= 0, z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + s38 :|: s38 >= 0, s38 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', z'', z4) + s28 :|: s28 >= 0, s28 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + s23 :|: s23 >= 0, s23 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + s25 :|: s25 >= 0, s25 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + s35 :|: s35 >= 0, s35 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + s30 :|: s30 >= 0, s30 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s32 :|: s32 >= 0, s32 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] or: runtime: O(1) [0], size: O(n^1) [2 + z'] ---------------------------------------- (177) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: IF2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: LCMITER after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 Computed SIZE bound using CoFloCo for: IF after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (178) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ z' }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s41, 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s41 >= 0, s41 <= s14 + 2, s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s42, 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s42 >= 0, s42 <= s15 + 2, s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s43, z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s43 >= 0, s43 <= s16 + 2, s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s44, 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s27 :|: s44 >= 0, s44 <= s17 + 2, s27 >= 0, s27 <= 0, s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s45, 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + s34 :|: s45 >= 0, s45 <= s18 + 2, s34 >= 0, s34 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s46, z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s39 :|: s46 >= 0, s46 <= s19 + 2, s39 >= 0, s39 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + s36 :|: s36 >= 0, s36 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + s31 :|: s31 >= 0, s31 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s33 :|: s33 >= 0, s33 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', z'', z4) + s29 :|: s29 >= 0, s29 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + s24 :|: s24 >= 0, s24 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + s26 :|: s26 >= 0, s26 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', z'', z4) + s40 :|: s40 >= 0, s40 <= 0, z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + s37 :|: s37 >= 0, s37 <= 0, z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + s38 :|: s38 >= 0, s38 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', z'', z4) + s28 :|: s28 >= 0, s28 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + s23 :|: s23 >= 0, s23 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + s25 :|: s25 >= 0, s25 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + s35 :|: s35 >= 0, s35 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + s30 :|: s30 >= 0, s30 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s32 :|: s32 >= 0, s32 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] or: runtime: O(1) [0], size: O(n^1) [2 + z'] IF2: runtime: ?, size: O(1) [0] LCMITER: runtime: ?, size: O(1) [2] IF: runtime: ?, size: O(1) [1] ---------------------------------------- (179) 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: ? ---------------------------------------- (180) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 1 + 7*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z'' = 0, z' >= 0, z >= 0 DIV(z, z', z'') -{ -6 + 7*z + z'' }-> 1 + s11 :|: s11 >= 0, s11 <= z'' - 1 + 1, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 DIVISIBLE(z, z') -{ 2 + 7*z + z' }-> 1 + s9 :|: s9 >= 0, s9 <= 1 + (z' - 1) + 1, z' - 1 >= 0, z - 1 >= 0 GE(z, z') -{ z' }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z' - 1 >= 0, z - 1 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(s2, z', 1 + (z'' - 1), 1 + (z4 - 1), z5) + s7 :|: s7 >= 0, s7 <= 0, s2 >= 0, s2 <= 2, z = 1, z'' - 1 >= 0, z' >= 0, z4 - 1 >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(2, z', 1 + (z'' - 1), 0, z5) + s6 :|: s6 >= 0, s6 <= 0, z4 = 0, z = 1, z'' - 1 >= 0, z' >= 0, z5 >= 0 IF(z, z', z'', z4, z5) -{ 1 + 7*z4 }-> 1 + IF2(0, z', z'', z4, z5) + s8 :|: s8 >= 0, s8 <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(z', z'', 0, z5) + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z = 1, z' >= 0, z4 >= 0, z5 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(0, z'', z4, z5) + s :|: s >= 0, s <= 0, z'' >= 0, z = 1, z4 >= 0, z5 >= 0, z' = 0 IF2(z, z', z'', z4, z5) -{ 1 + z' }-> 1 + LCMITER(1 + (z' - 1), z'', 1 + s20, z5) + s' :|: s20 >= 0, s20 <= z' - 1 + z4, s' >= 0, s' <= 0, z'' >= 0, z' - 1 >= 0, z = 1, z4 >= 0, z5 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 0)) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', z' - 1)) + TIMES(z'', z' - 1) :|: z'' >= 0, z = 1, z' - 1 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 0) :|: z'' >= 0, z = 1, z' = 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z'', times(z'', 1 + (1 + 0))) + TIMES(z'', 1 + (1 + 0)) :|: z'' >= 0, z = 1, z' = 0 LCM(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, ifTimes(s12, z, z')) :|: s12 >= 0, s12 <= 2, z' >= 0, z >= 0 LCM(z, z') -{ 0 }-> 1 + LCMITER(z, z', 0, 0) :|: z' >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s41, 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s41 >= 0, s41 <= s14 + 2, s14 >= 0, s14 <= 2, z'' - 1 >= 0, z' >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s42, 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s42 >= 0, s42 <= s15 + 2, s15 >= 0, s15 <= 2, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, z'' - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(s43, z, z', 1 + (z'' - 1), 1 + (z4 - 1)) :|: s43 >= 0, s43 <= s16 + 2, s16 >= 0, s16 <= 2, z'' - 1 >= 0, z' >= 0, z >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', z4) :|: z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) :|: z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', z4) :|: z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) :|: z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z4 - 1 >= 0, z = 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) :|: z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) :|: z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s44, 0, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s27 :|: s44 >= 0, s44 <= s17 + 2, s27 >= 0, s27 <= 0, s17 >= 0, s17 <= 2, z' >= 0, z'' - 1 >= 0, z = 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s45, 1 + (z - 1), z', 1 + (z'' - 1), 1 + (z4 - 1)) + s34 :|: s45 >= 0, s45 <= s18 + 2, s34 >= 0, s34 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0, z4 - 1 >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(s46, z, z', 1 + (z'' - 1), 1 + (z4 - 1)) + s39 :|: s46 >= 0, s46 <= s19 + 2, s39 >= 0, s39 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z'' - 1 >= 0, z4 - 1 >= 0, z >= 0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', z'', z4) + s36 :|: s36 >= 0, s36 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, 1 = 1, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(z0, 1 + (z - 1), z', z'', 0) + s31 :|: s31 >= 0, s31 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, 1 = 1, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(z0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s33 :|: s33 >= 0, s33 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, 1 = 1, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', z'', z4) + s29 :|: s29 >= 0, s29 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, 2 = 2, z0 >= 0, 0 = z0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(2, 0, z', z'', 0) + s24 :|: s24 >= 0, s24 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, 2 = 2, z0 >= 0, 2 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(2, 0, z', 0, 1 + (z4 - 1)) + s26 :|: s26 >= 0, s26 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, 2 = 2, z0 >= 0, 1 = z0 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', z'', z4) + s40 :|: s40 >= 0, s40 <= 0, z' >= 0, z >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, z, z', z'', 0) + s37 :|: s37 >= 0, s37 <= 0, z4 = 0, z' >= 0, z >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, z, z', 0, 1 + (z4 - 1)) + s38 :|: s38 >= 0, s38 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', z'', z4) + s28 :|: s28 >= 0, s28 <= 0, z' >= 0, z = 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 0, z', z'', 0) + s23 :|: s23 >= 0, s23 <= 0, z4 = 0, z' >= 0, z = 0, z'' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 0, z', 0, 1 + (z4 - 1)) + s25 :|: s25 >= 0, s25 <= 0, z'' = 0, z' >= 0, z = 0, z4 - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', z'', z4) + s35 :|: s35 >= 0, s35 <= 0, z' >= 0, z - 1 >= 0, z'' >= 0, z4 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(0, 1 + (z - 1), z', z'', 0) + s30 :|: s30 >= 0, s30 <= 0, z4 = 0, z' >= 0, z - 1 >= 0, z'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 LCMITER(z, z', z'', z4) -{ 1 + z4 }-> 1 + IF(0, 1 + (z - 1), z', 0, 1 + (z4 - 1)) + s32 :|: s32 >= 0, s32 <= 0, z'' = 0, z' >= 0, z4 - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 PLUS(z, z') -{ z }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(2, 0, z') :|: z' >= 0, z = 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(1, 1 + (z - 1), z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(0, z, z') :|: z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 div(z, z', z'') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2, z'' = 0, z' >= 0, z >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z'' - 1 >= 0, z' >= 0, z = 0 div(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 divisible(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 2, z' - 1 >= 0, z - 1 >= 0 divisible(z, z') -{ 0 }-> 2 :|: z' - 1 >= 0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ge(z, z') -{ 0 }-> s13 :|: s13 >= 0, s13 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 0)) :|: z'' >= 0, z = 1, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', z' - 1)) :|: z'' >= 0, z = 1, z' - 1 >= 0 ifTimes(z, z', z'') -{ 0 }-> plus(z'', times(z'', 1 + (1 + 0))) :|: z'' >= 0, z = 1, z' = 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 or(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 or(z, z') -{ 0 }-> 2 :|: z = 2, z' >= 0 or(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s21 :|: s21 >= 0, s21 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> ifTimes(2, 0, z') :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> ifTimes(1, 1 + (z - 1), z') :|: z - 1 >= 0, z' >= 0 times(z, z') -{ 0 }-> ifTimes(0, z, z') :|: z' >= 0, z >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {IF2,LCMITER,IF}, {ifTimes,times}, {LCM}, {TIMES,IFTIMES} Previous analysis results are: PLUS: runtime: O(n^1) [z], size: O(1) [0] div: runtime: O(1) [0], size: O(1) [2] divisible: runtime: O(1) [0], size: O(1) [2] DIVISIBLE: runtime: O(n^1) [7*z], size: O(1) [0] DIV: runtime: O(n^1) [1 + 7*z + z''], size: O(n^1) [1 + z''] ge: runtime: O(1) [0], size: O(1) [2] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] or: runtime: O(1) [0], size: O(n^1) [2 + z'] IF2: runtime: INF, size: O(1) [0] LCMITER: runtime: ?, size: O(1) [2] IF: runtime: ?, size: O(1) [1] ---------------------------------------- (181) 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: LCM(v0, v1) -> null_LCM [0] divisible(v0, v1) -> null_divisible [0] div(v0, v1, v2) -> null_div [0] plus(v0, v1) -> null_plus [0] or(v0, v1) -> null_or [0] ge(v0, v1) -> null_ge [0] times(v0, v1) -> null_times [0] p(v0) -> null_p [0] ifTimes(v0, v1, v2) -> null_ifTimes [0] IF(v0, v1, v2, v3, v4) -> null_IF [0] IF2(v0, v1, v2, v3, v4) -> null_IF2 [0] PLUS(v0, v1) -> null_PLUS [0] GE(v0, v1) -> null_GE [0] DIVISIBLE(v0, v1) -> null_DIVISIBLE [0] DIV(v0, v1, v2) -> null_DIV [0] IFTIMES(v0, v1, v2) -> null_IFTIMES [0] And the following fresh constants: null_LCM, null_divisible, null_div, null_plus, null_or, null_ge, null_times, null_p, null_ifTimes, null_IF, null_IF2, null_PLUS, null_GE, null_DIVISIBLE, null_DIV, null_IFTIMES, const, const1 ---------------------------------------- (182) 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: IF(false, z0, z1, z2, z3) -> c5(IF2(divisible(z2, z1), z0, z1, z2, z3), DIVISIBLE(z2, z1)) [1] IF2(false, z0, z1, z2, z3) -> c7(LCMITER(z0, z1, plus(z0, z2), z3), PLUS(z0, z2)) [1] PLUS(s(z0), z1) -> c9(PLUS(z0, z1)) [1] GE(s(z0), s(z1)) -> c17(GE(z0, z1)) [1] DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) [1] DIV(z0, z1, 0) -> c22(DIVISIBLE(z0, z1)) [1] DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) [1] LCMITER(z0, z1, z2, z3) -> c2(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3)) [1] LCMITER(z0, z1, z2, z3) -> c3(IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3), GE(z2, z3)) [1] TIMES(z0, z1) -> c10(IFTIMES(ge(0, z0), z0, z1)) [1] IFTIMES(false, z0, z1) -> c12(PLUS(z1, times(z1, p(z0))), TIMES(z1, p(z0))) [1] LCM(z0, z1) -> c4(LCMITER(z0, z1, 0, times(z0, z1))) [0] divisible(0, s(z0)) -> true [0] divisible(s(z0), s(z1)) -> div(s(z0), s(z1), s(z1)) [0] div(s(z0), z1, s(z2)) -> div(z0, z1, z2) [0] div(z0, z1, 0) -> divisible(z0, z1) [0] div(0, z0, s(z1)) -> false [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] or(true, z0) -> true [0] or(false, z0) -> z0 [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] times(z0, z1) -> ifTimes(ge(0, z0), z0, z1) [0] p(s(z0)) -> z0 [0] p(0) -> s(s(0)) [0] ifTimes(true, z0, z1) -> 0 [0] ifTimes(false, z0, z1) -> plus(z1, times(z1, p(z0))) [0] LCM(v0, v1) -> null_LCM [0] divisible(v0, v1) -> null_divisible [0] div(v0, v1, v2) -> null_div [0] plus(v0, v1) -> null_plus [0] or(v0, v1) -> null_or [0] ge(v0, v1) -> null_ge [0] times(v0, v1) -> null_times [0] p(v0) -> null_p [0] ifTimes(v0, v1, v2) -> null_ifTimes [0] IF(v0, v1, v2, v3, v4) -> null_IF [0] IF2(v0, v1, v2, v3, v4) -> null_IF2 [0] PLUS(v0, v1) -> null_PLUS [0] GE(v0, v1) -> null_GE [0] DIVISIBLE(v0, v1) -> null_DIVISIBLE [0] DIV(v0, v1, v2) -> null_DIV [0] IFTIMES(v0, v1, v2) -> null_IFTIMES [0] The TRS has the following type information: IF :: false:true:null_divisible:null_div:null_or:null_ge -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c5:null_IF false :: false:true:null_divisible:null_div:null_or:null_ge c5 :: c7:null_IF2 -> c21:null_DIVISIBLE -> c5:null_IF IF2 :: false:true:null_divisible:null_div:null_or:null_ge -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c7:null_IF2 divisible :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> false:true:null_divisible:null_div:null_or:null_ge DIVISIBLE :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c21:null_DIVISIBLE c7 :: c2:c3 -> c9:null_PLUS -> c7:null_IF2 LCMITER :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c2:c3 plus :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes PLUS :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c9:null_PLUS s :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes c9 :: c9:null_PLUS -> c9:null_PLUS GE :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c17:null_GE c17 :: c17:null_GE -> c17:null_GE c21 :: c22:c24:null_DIV -> c21:null_DIVISIBLE DIV :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c22:c24:null_DIV 0 :: s:0:null_plus:null_times:null_p:null_ifTimes c22 :: c21:null_DIVISIBLE -> c22:c24:null_DIV c24 :: c22:c24:null_DIV -> c22:c24:null_DIV c2 :: c5:null_IF -> c2:c3 or :: false:true:null_divisible:null_div:null_or:null_ge -> false:true:null_divisible:null_div:null_or:null_ge -> false:true:null_divisible:null_div:null_or:null_ge ge :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> false:true:null_divisible:null_div:null_or:null_ge c3 :: c5:null_IF -> c17:null_GE -> c2:c3 TIMES :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c10 c10 :: c12:null_IFTIMES -> c10 IFTIMES :: false:true:null_divisible:null_div:null_or:null_ge -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c12:null_IFTIMES c12 :: c9:null_PLUS -> c10 -> c12:null_IFTIMES times :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes p :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes LCM :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> c4:null_LCM c4 :: c2:c3 -> c4:null_LCM true :: false:true:null_divisible:null_div:null_or:null_ge div :: s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> false:true:null_divisible:null_div:null_or:null_ge ifTimes :: false:true:null_divisible:null_div:null_or:null_ge -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes -> s:0:null_plus:null_times:null_p:null_ifTimes null_LCM :: c4:null_LCM null_divisible :: false:true:null_divisible:null_div:null_or:null_ge null_div :: false:true:null_divisible:null_div:null_or:null_ge null_plus :: s:0:null_plus:null_times:null_p:null_ifTimes null_or :: false:true:null_divisible:null_div:null_or:null_ge null_ge :: false:true:null_divisible:null_div:null_or:null_ge null_times :: s:0:null_plus:null_times:null_p:null_ifTimes null_p :: s:0:null_plus:null_times:null_p:null_ifTimes null_ifTimes :: s:0:null_plus:null_times:null_p:null_ifTimes null_IF :: c5:null_IF null_IF2 :: c7:null_IF2 null_PLUS :: c9:null_PLUS null_GE :: c17:null_GE null_DIVISIBLE :: c21:null_DIVISIBLE null_DIV :: c22:c24:null_DIV null_IFTIMES :: c12:null_IFTIMES const :: c2:c3 const1 :: c10 Rewrite Strategy: INNERMOST ---------------------------------------- (183) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: false => 1 0 => 0 true => 2 null_LCM => 0 null_divisible => 0 null_div => 0 null_plus => 0 null_or => 0 null_ge => 0 null_times => 0 null_p => 0 null_ifTimes => 0 null_IF => 0 null_IF2 => 0 null_PLUS => 0 null_GE => 0 null_DIVISIBLE => 0 null_DIV => 0 null_IFTIMES => 0 const => 0 const1 => 0 ---------------------------------------- (184) Obligation: Complexity RNTS consisting of the following rules: DIV(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIVISIBLE(z0, z1) :|: z'' = 0, z = z0, z1 >= 0, z' = z1, z0 >= 0 DIV(z, z', z'') -{ 1 }-> 1 + DIV(z0, z1, z2) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0, z'' = 1 + z2, z2 >= 0 DIVISIBLE(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 DIVISIBLE(z, z') -{ 1 }-> 1 + DIV(1 + z0, 1 + z1, 1 + z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 GE(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 GE(z, z') -{ 1 }-> 1 + GE(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 IF(z, z', z'', z4, z5) -{ 0 }-> 0 :|: z5 = v4, v0 >= 0, v4 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z4 = v3, v2 >= 0, v3 >= 0 IF(z, z', z'', z4, z5) -{ 1 }-> 1 + IF2(divisible(z2, z1), z0, z1, z2, z3) + DIVISIBLE(z2, z1) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z3, z' = z0, z2 >= 0, z3 >= 0, z'' = z1, z4 = z2 IF2(z, z', z'', z4, z5) -{ 0 }-> 0 :|: z5 = v4, v0 >= 0, v4 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z4 = v3, v2 >= 0, v3 >= 0 IF2(z, z', z'', z4, z5) -{ 1 }-> 1 + LCMITER(z0, z1, plus(z0, z2), z3) + PLUS(z0, z2) :|: z1 >= 0, z = 1, z0 >= 0, z5 = z3, z' = z0, z2 >= 0, z3 >= 0, z'' = z1, z4 = z2 IFTIMES(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 IFTIMES(z, z', z'') -{ 1 }-> 1 + PLUS(z1, times(z1, p(z0))) + TIMES(z1, p(z0)) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 LCM(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 LCM(z, z') -{ 0 }-> 1 + LCMITER(z0, z1, 0, times(z0, z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z4 = z3, z2 >= 0, z3 >= 0 LCMITER(z, z', z'', z4) -{ 1 }-> 1 + IF(or(ge(0, z0), ge(z2, z3)), z0, z1, z2, z3) + GE(z2, z3) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z4 = z3, z2 >= 0, z3 >= 0 PLUS(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 TIMES(z, z') -{ 1 }-> 1 + IFTIMES(ge(0, z0), z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 div(z, z', z'') -{ 0 }-> divisible(z0, z1) :|: z'' = 0, z = z0, z1 >= 0, z' = z1, z0 >= 0 div(z, z', z'') -{ 0 }-> div(z0, z1, z2) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0, z'' = 1 + z2, z2 >= 0 div(z, z', z'') -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z'' = 1 + z1, z = 0, z' = z0 div(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 divisible(z, z') -{ 0 }-> div(1 + z0, 1 + z1, 1 + z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 divisible(z, z') -{ 0 }-> 2 :|: z0 >= 0, z' = 1 + z0, z = 0 divisible(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ge(z, z') -{ 0 }-> ge(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 ge(z, z') -{ 0 }-> 2 :|: z = z0, z0 >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z0 >= 0, z' = 1 + z0, z = 0 ge(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ifTimes(z, z', z'') -{ 0 }-> plus(z1, times(z1, p(z0))) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> 0 :|: z = 2, z1 >= 0, z0 >= 0, z' = z0, z'' = z1 ifTimes(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 or(z, z') -{ 0 }-> z0 :|: z = 1, z0 >= 0, z' = z0 or(z, z') -{ 0 }-> 2 :|: z = 2, z0 >= 0, z' = z0 or(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 p(z) -{ 0 }-> z0 :|: z = 1 + z0, z0 >= 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 plus(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> 1 + plus(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> ifTimes(ge(0, z0), z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (185) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (187) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (189) 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)) ---------------------------------------- (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: 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 ---------------------------------------- (191) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (193) 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 ---------------------------------------- (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: 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 ---------------------------------------- (195) 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)) ---------------------------------------- (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: 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 ---------------------------------------- (197) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (199) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (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: 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 ---------------------------------------- (201) 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 ---------------------------------------- (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: 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 ---------------------------------------- (203) 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)) ---------------------------------------- (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: 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 ---------------------------------------- (205) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: TIMES(0, x1) -> c10(IFTIMES(true, 0, x1)) ---------------------------------------- (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: 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 ---------------------------------------- (207) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (209) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (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: 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 ---------------------------------------- (211) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (213) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (215) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (217) 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 ---------------------------------------- (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: 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 ---------------------------------------- (219) 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)) ---------------------------------------- (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: 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 ---------------------------------------- (221) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (223) 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 ---------------------------------------- (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: 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 ---------------------------------------- (225) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (227) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (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: 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 ---------------------------------------- (229) 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 ---------------------------------------- (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: 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 ---------------------------------------- (231) 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 ---------------------------------------- (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: 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 ---------------------------------------- (233) 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 ---------------------------------------- (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: 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 ---------------------------------------- (235) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (237) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: LCMITER(0, x0, x1, x2) -> c2 LCMITER(0, x0, 0, s(z0)) -> c2 ---------------------------------------- (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: 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 ---------------------------------------- (239) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (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: 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 ---------------------------------------- (241) 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 ---------------------------------------- (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: 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 ---------------------------------------- (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(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 ---------------------------------------- (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: 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 ---------------------------------------- (245) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (247) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, 0, s(z0)) -> c2 ---------------------------------------- (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: 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 ---------------------------------------- (249) 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 ---------------------------------------- (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: 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 ---------------------------------------- (251) 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)) = 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)) = [2] POL(IFTIMES(x_1, x_2, x_3)) = 0 POL(LCM(x_1, x_2)) = [2] + x_1 POL(LCMITER(x_1, x_2, x_3, x_4)) = [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)) = [3] + [3]x_1 + [3]x_2 POL(divisible(x_1, x_2)) = [3] + [3]x_1 + [3]x_2 POL(false) = [2] POL(ge(x_1, x_2)) = [2] 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)) = 0 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = 0 POL(true) = 0 ---------------------------------------- (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: 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 ---------------------------------------- (253) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (255) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 4 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: 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 ---------------------------------------- (257) 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 ---------------------------------------- (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: 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 ---------------------------------------- (259) 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 ---------------------------------------- (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: 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 ---------------------------------------- (261) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (263) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, 0, s(z0)) -> c3 ---------------------------------------- (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: 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 ---------------------------------------- (265) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (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: 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 ---------------------------------------- (267) 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 ---------------------------------------- (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: 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 ---------------------------------------- (269) 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 ---------------------------------------- (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: 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 ---------------------------------------- (271) 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)) ---------------------------------------- (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: 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 ---------------------------------------- (273) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, 0, s(z0)) -> c3 ---------------------------------------- (274) 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 ---------------------------------------- (275) 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)) ---------------------------------------- (276) 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 ---------------------------------------- (277) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (278) 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 ---------------------------------------- (279) 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))) ---------------------------------------- (280) 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 ---------------------------------------- (281) 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))) ---------------------------------------- (282) 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 ---------------------------------------- (283) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (284) 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 ---------------------------------------- (285) 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))) ---------------------------------------- (286) 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 ---------------------------------------- (287) 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)))) ---------------------------------------- (288) 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 ---------------------------------------- (289) 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))))) ---------------------------------------- (290) 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 ---------------------------------------- (291) 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)))) ---------------------------------------- (292) 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 ---------------------------------------- (293) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: IFTIMES(false, 0, x0) -> c(TIMES(x0, s(s(0)))) ---------------------------------------- (294) 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 ---------------------------------------- (295) 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))) ---------------------------------------- (296) 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 ---------------------------------------- (297) 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)) ---------------------------------------- (298) 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 ---------------------------------------- (299) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, x1, 0) -> c2(IF(true, 0, x0, x1, 0)) ---------------------------------------- (300) 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 ---------------------------------------- (301) 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)) ---------------------------------------- (302) 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 ---------------------------------------- (303) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, x2, 0) -> c2(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (304) 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 ---------------------------------------- (305) 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)) ---------------------------------------- (306) 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 ---------------------------------------- (307) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, x1, 0) -> c2(IF(true, 0, x0, x1, 0)) ---------------------------------------- (308) 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 ---------------------------------------- (309) 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)) ---------------------------------------- (310) 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 ---------------------------------------- (311) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, x2, 0) -> c2(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (312) 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 ---------------------------------------- (313) 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)) ---------------------------------------- (314) 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 ---------------------------------------- (315) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, x1, 0) -> c3(IF(true, 0, x0, x1, 0)) ---------------------------------------- (316) 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 ---------------------------------------- (317) 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)) ---------------------------------------- (318) 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 ---------------------------------------- (319) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, x2, 0) -> c3(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (320) 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 ---------------------------------------- (321) 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)) ---------------------------------------- (322) 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 ---------------------------------------- (323) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(0, x0, x1, 0) -> c3(IF(true, 0, x0, x1, 0)) ---------------------------------------- (324) 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 ---------------------------------------- (325) 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)) ---------------------------------------- (326) 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 ---------------------------------------- (327) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LCMITER(s(x0), x1, x2, 0) -> c3(IF(true, s(x0), x1, x2, 0)) ---------------------------------------- (328) 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 ---------------------------------------- (329) 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)) ---------------------------------------- (330) 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(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))) 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(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)))) 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 ---------------------------------------- (331) 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))) ---------------------------------------- (332) 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(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))) PLUS(s(s(y0)), z1) -> c9(PLUS(s(y0), z1)) 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(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)) 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: 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 ---------------------------------------- (333) 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))) ---------------------------------------- (334) 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 ---------------------------------------- (335) 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))) ---------------------------------------- (336) 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(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)) 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(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)) 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))) 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 ---------------------------------------- (337) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (338) 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(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(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)) 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(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(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)) 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(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 ---------------------------------------- (339) 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))) ---------------------------------------- (340) 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(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(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)) 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(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(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)) 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(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 ---------------------------------------- (341) 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))) ---------------------------------------- (342) 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(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(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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) 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(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)) 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))) 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(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(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 ---------------------------------------- (343) 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))) ---------------------------------------- (344) 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(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(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)) 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(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: 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(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)) 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))) 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(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(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 ---------------------------------------- (345) 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))) ---------------------------------------- (346) 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(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(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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) 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(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)) 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))) 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(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(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 ---------------------------------------- (347) 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))) ---------------------------------------- (348) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) 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(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)) 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))) 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(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(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 ---------------------------------------- (349) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace DIV(s(z0), z1, s(z2)) -> c24(DIV(z0, z1, z2)) by DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) ---------------------------------------- (350) 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))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) 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(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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1 ---------------------------------------- (351) 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))) ---------------------------------------- (352) 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))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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(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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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(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(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1 ---------------------------------------- (353) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (354) 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))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) 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(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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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(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(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1 ---------------------------------------- (355) 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:none And the Tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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) = [1] POL(DIV(x_1, x_2, x_3)) = x_1 + x_2 POL(DIVISIBLE(x_1, x_2)) = x_1 + x_2 POL(GE(x_1, x_2)) = x_1 POL(IF(x_1, x_2, x_3, x_4, x_5)) = x_2 + x_3 POL(IF2(x_1, x_2, x_3, x_4, x_5)) = x_2 + x_3 + x_4 POL(IFTIMES(x_1, x_2, x_3)) = x_1 POL(LCM(x_1, x_2)) = [1] + x_1 + x_2 POL(LCMITER(x_1, x_2, x_3, x_4)) = x_1 + 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(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] + 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)) = [1] + x_1 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (356) 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))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) 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(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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1 ---------------------------------------- (357) 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))) ---------------------------------------- (358) 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))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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(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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1 ---------------------------------------- (359) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) ---------------------------------------- (360) 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))) 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(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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1, c5_2 ---------------------------------------- (361) 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))) ---------------------------------------- (362) 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))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) 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))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1, c5_2 ---------------------------------------- (363) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (364) 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))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1, c5_2 ---------------------------------------- (365) 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))) ---------------------------------------- (366) 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))) 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(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, TIMES_2, IF_5, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3 Compound Symbols: c21_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, c24_1, c5_2 ---------------------------------------- (367) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace IF(false, x0, s(x1), s(x2), x3) -> c5(DIVISIBLE(s(x2), s(x1))) by IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(DIVISIBLE(s(x2), s(z1))) ---------------------------------------- (368) 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))) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(DIVISIBLE(s(x2), s(z1))) S tuples: DIVISIBLE(s(z0), s(z1)) -> c21(DIV(s(z0), s(z1), s(z1))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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: 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(DIVISIBLE(s(x2), s(z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, TIMES_2, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3, IF_5 Compound Symbols: c21_1, c10_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, c24_1, c5_2, c5_1 ---------------------------------------- (369) 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)) ---------------------------------------- (370) 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))) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(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))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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: 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(DIVISIBLE(s(x2), s(z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, TIMES_2, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3, IF_5 Compound Symbols: c21_1, c10_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, c24_1, c5_2, c5_1 ---------------------------------------- (371) 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))) ---------------------------------------- (372) 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))) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(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))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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: 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(DIVISIBLE(s(x2), s(z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, TIMES_2, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3, IF_5 Compound Symbols: c21_1, c10_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, c24_1, c5_2, c5_1 ---------------------------------------- (373) 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)))) ---------------------------------------- (374) 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))) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(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))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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: 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(DIVISIBLE(s(x2), s(z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, TIMES_2, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3, IF_5 Compound Symbols: c21_1, c10_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, c24_1, c5_2, c5_1 ---------------------------------------- (375) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: IFTIMES(false, 0, z0) -> c1(TIMES(z0, s(s(0)))) ---------------------------------------- (376) 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))) TIMES(s(z0), x1) -> c10(IFTIMES(false, s(z0), 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)) 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(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(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))) 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)) 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))) LCMITER(s(z0), z1, s(z2), s(z3)) -> c2(IF(ge(z2, z3), s(z0), z1, s(z2), s(z3))) DIV(s(s(y0)), z1, s(s(y2))) -> c24(DIV(s(y0), z1, s(y2))) DIV(s(s(y0)), s(y1), s(0)) -> c24(DIV(s(y0), s(y1), 0)) 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))) 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, 0, s(z1), s(x1), s(x2)) -> c5(IF2(div(x1, s(z1), z1), 0, s(z1), s(x1), s(x2)), DIVISIBLE(s(x1), 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: 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(x0, x1, s(z0), s(0)) -> c3(IF(or(ge(0, x0), true), x0, x1, s(z0), s(0))) LCMITER(0, z0, s(z1), s(z2)) -> c3(GE(s(z1), s(z2))) IF(false, x0, s(z1), s(x2), s(0)) -> c5(DIVISIBLE(s(x2), s(z1))) IF(false, x0, s(z1), s(0), s(s(x2))) -> c5(DIVISIBLE(s(0), s(z1))) IF(false, x0, s(z1), s(s(x2)), s(s(x3))) -> c5(DIVISIBLE(s(s(x2)), s(z1))) IF(false, s(x0), s(z1), s(z2), x3) -> c5(DIVISIBLE(s(z2), s(z1))) IF(false, s(x0), s(z1), s(x2), s(x3)) -> c5(DIVISIBLE(s(x2), s(z1))) Defined Rule Symbols: divisible_2, div_3, plus_2, or_2, ge_2, times_2, p_1, ifTimes_3 Defined Pair Symbols: DIVISIBLE_2, TIMES_2, LCMITER_4, IF2_5, IFTIMES_3, LCM_2, PLUS_2, GE_2, DIV_3, IF_5 Compound Symbols: c21_1, c10_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, c24_1, c5_2, c5_1