KILLED proof of input_EYO0CSjGiN.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), 47 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), 52 ms] (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 462 ms] (16) BEST (17) proven lower bound (18) LowerBoundPropagationProof [FINISHED, 0 ms] (19) BOUNDS(n^1, INF) (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 75 ms] (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 121 ms] (24) typed CpxTrs (25) RewriteLemmaProof [LOWER BOUND(ID), 51 ms] (26) typed CpxTrs (27) RewriteLemmaProof [LOWER BOUND(ID), 2095 ms] (28) typed CpxTrs (29) RewriteLemmaProof [LOWER BOUND(ID), 50 ms] (30) typed CpxTrs (31) RewriteLemmaProof [LOWER BOUND(ID), 96.6 s] (32) typed CpxTrs (33) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (34) CpxWeightedTrs (35) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (36) CpxTypedWeightedTrs (37) CompletionProof [UPPER BOUND(ID), 0 ms] (38) CpxTypedWeightedCompleteTrs (39) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (40) CpxTypedWeightedCompleteTrs (41) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 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), 325 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 120 ms] (52) CpxRNTS (53) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 304 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 36 ms] (58) CpxRNTS (59) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 223 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 45 ms] (64) CpxRNTS (65) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 48 ms] (68) CpxRNTS (69) IntTrsBoundProof [UPPER BOUND(ID), 14 ms] (70) CpxRNTS (71) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (72) CpxRNTS (73) IntTrsBoundProof [UPPER BOUND(ID), 292 ms] (74) CpxRNTS (75) IntTrsBoundProof [UPPER BOUND(ID), 74 ms] (76) CpxRNTS (77) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (78) CpxRNTS (79) IntTrsBoundProof [UPPER BOUND(ID), 66 ms] (80) CpxRNTS (81) IntTrsBoundProof [UPPER BOUND(ID), 13 ms] (82) CpxRNTS (83) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (84) CpxRNTS (85) IntTrsBoundProof [UPPER BOUND(ID), 4800 ms] (86) CpxRNTS (87) IntTrsBoundProof [UPPER BOUND(ID), 1227 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 [ComplexityIfPolyImplication, 0 ms] (96) CdtProblem (97) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (98) CdtProblem (99) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (100) CdtProblem (101) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (102) CpxRelTRS (103) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (104) CpxTRS (105) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CpxWeightedTrs (107) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CpxTypedWeightedTrs (109) CompletionProof [UPPER BOUND(ID), 0 ms] (110) CpxTypedWeightedCompleteTrs (111) NarrowingProof [BOTH BOUNDS(ID, ID), 18 ms] (112) CpxTypedWeightedCompleteTrs (113) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (114) CpxRNTS (115) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (116) CpxRNTS (117) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (118) CpxRNTS (119) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (120) CpxRNTS (121) IntTrsBoundProof [UPPER BOUND(ID), 330 ms] (122) CpxRNTS (123) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] (124) CpxRNTS (125) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (126) CpxRNTS (127) IntTrsBoundProof [UPPER BOUND(ID), 178 ms] (128) CpxRNTS (129) IntTrsBoundProof [UPPER BOUND(ID), 44 ms] (130) CpxRNTS (131) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (132) CpxRNTS (133) IntTrsBoundProof [UPPER BOUND(ID), 269 ms] (134) CpxRNTS (135) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] (136) CpxRNTS (137) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (138) CpxRNTS (139) IntTrsBoundProof [UPPER BOUND(ID), 138 ms] (140) CpxRNTS (141) IntTrsBoundProof [UPPER BOUND(ID), 62 ms] (142) CpxRNTS (143) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (144) CpxRNTS (145) IntTrsBoundProof [UPPER BOUND(ID), 218 ms] (146) CpxRNTS (147) IntTrsBoundProof [UPPER BOUND(ID), 34 ms] (148) CpxRNTS (149) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (150) CpxRNTS (151) IntTrsBoundProof [UPPER BOUND(ID), 97 ms] (152) CpxRNTS (153) IntTrsBoundProof [UPPER BOUND(ID), 35 ms] (154) CpxRNTS (155) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (156) CpxRNTS (157) IntTrsBoundProof [UPPER BOUND(ID), 88 ms] (158) CpxRNTS (159) IntTrsBoundProof [UPPER BOUND(ID), 4 ms] (160) CpxRNTS (161) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (162) CpxRNTS (163) IntTrsBoundProof [UPPER BOUND(ID), 128 ms] (164) CpxRNTS (165) IntTrsBoundProof [UPPER BOUND(ID), 73 ms] (166) CpxRNTS (167) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (168) CpxRNTS (169) IntTrsBoundProof [UPPER BOUND(ID), 190 ms] (170) CpxRNTS (171) IntTrsBoundProof [UPPER BOUND(ID), 42 ms] (172) CpxRNTS (173) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (174) CpxRNTS (175) IntTrsBoundProof [UPPER BOUND(ID), 4823 ms] (176) CpxRNTS (177) IntTrsBoundProof [UPPER BOUND(ID), 862 ms] (178) CpxRNTS (179) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (180) CpxRNTS (181) IntTrsBoundProof [UPPER BOUND(ID), 2082 ms] (182) CpxRNTS (183) IntTrsBoundProof [UPPER BOUND(ID), 818 ms] (184) CpxRNTS (185) CompletionProof [UPPER BOUND(ID), 0 ms] (186) CpxTypedWeightedCompleteTrs (187) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (188) CpxRNTS (189) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (190) CdtProblem (191) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (194) CdtProblem (195) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (196) CdtProblem (197) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 3 ms] (202) CdtProblem (203) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (204) CdtProblem (205) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (210) CdtProblem (211) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (216) CdtProblem (217) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (218) CdtProblem (219) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CdtProblem (223) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (224) CdtProblem (225) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) CdtProblem (227) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (228) CdtProblem (229) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (230) CdtProblem (231) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (232) CdtProblem (233) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (234) CdtProblem (235) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (236) CdtProblem (237) CdtNarrowingProof [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)), 52 ms] (242) CdtProblem (243) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (244) CdtProblem (245) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 63 ms] (248) CdtProblem (249) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (250) CdtProblem (251) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (252) CdtProblem (253) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (254) CdtProblem (255) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (258) CdtProblem (259) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (260) CdtProblem (261) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (262) CdtProblem (263) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (264) CdtProblem (265) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 111 ms] (266) CdtProblem (267) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (268) CdtProblem (269) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (270) CdtProblem (271) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (272) CdtProblem (273) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (274) CdtProblem (275) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (276) CdtProblem (277) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (278) CdtProblem (279) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (280) CdtProblem (281) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 84 ms] (282) CdtProblem (283) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (284) CdtProblem (285) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (286) CdtProblem (287) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (288) CdtProblem (289) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (290) CdtProblem (291) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (292) CdtProblem (293) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (294) CdtProblem (295) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (296) CdtProblem (297) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 434 ms] (298) CdtProblem (299) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (300) CdtProblem (301) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (302) CdtProblem (303) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (304) CdtProblem (305) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (306) CdtProblem (307) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (308) CdtProblem (309) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (310) CdtProblem (311) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (312) CdtProblem (313) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 116 ms] (314) CdtProblem (315) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (316) CdtProblem (317) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 167 ms] (318) CdtProblem (319) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 3 ms] (320) CdtProblem (321) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (322) CdtProblem (323) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (324) CdtProblem (325) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (326) CdtProblem (327) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 146 ms] (328) CdtProblem (329) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (330) CdtProblem (331) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (332) CdtProblem (333) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (334) CdtProblem (335) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (336) CdtProblem (337) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (338) CdtProblem (339) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (340) CdtProblem (341) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (342) CdtProblem (343) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (344) CdtProblem (345) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 225 ms] (346) CdtProblem (347) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (348) CdtProblem (349) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (350) CdtProblem (351) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 216 ms] (352) CdtProblem (353) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (354) CdtProblem (355) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (356) CdtProblem (357) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (358) CdtProblem (359) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (360) CdtProblem (361) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (362) CdtProblem (363) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 205 ms] (364) 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: le(s(x), 0) -> false le(0, y) -> true le(s(x), s(y)) -> le(x, y) double(0) -> 0 double(s(x)) -> s(s(double(x))) log(0) -> logError log(s(x)) -> loop(s(x), s(0), 0) loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z) if(true, x, y, z) -> z if(false, x, y, z) -> loop(x, double(y), s(z)) maplog(xs) -> mapIter(xs, nil) mapIter(xs, ys) -> ifmap(isempty(xs), xs, ys) ifmap(true, xs, ys) -> ys ifmap(false, xs, ys) -> mapIter(droplast(xs), cons(log(last(xs)), ys)) isempty(nil) -> true isempty(cons(x, xs)) -> false last(nil) -> error last(cons(x, nil)) -> x last(cons(x, cons(y, xs))) -> last(cons(y, xs)) droplast(nil) -> nil droplast(cons(x, nil)) -> nil droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))) 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: le(s(x), 0') -> false le(0', y) -> true le(s(x), s(y)) -> le(x, y) double(0') -> 0' double(s(x)) -> s(s(double(x))) log(0') -> logError log(s(x)) -> loop(s(x), s(0'), 0') loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z) if(true, x, y, z) -> z if(false, x, y, z) -> loop(x, double(y), s(z)) maplog(xs) -> mapIter(xs, nil) mapIter(xs, ys) -> ifmap(isempty(xs), xs, ys) ifmap(true, xs, ys) -> ys ifmap(false, xs, ys) -> mapIter(droplast(xs), cons(log(last(xs)), ys)) isempty(nil) -> true isempty(cons(x, xs)) -> false last(nil) -> error last(cons(x, nil)) -> x last(cons(x, cons(y, xs))) -> last(cons(y, xs)) droplast(nil) -> nil droplast(cons(x, nil)) -> nil droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))) 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: le(s(x), 0) -> false le(0, y) -> true le(s(x), s(y)) -> le(x, y) double(0) -> 0 double(s(x)) -> s(s(double(x))) log(0) -> logError log(s(x)) -> loop(s(x), s(0), 0) loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z) if(true, x, y, z) -> z if(false, x, y, z) -> loop(x, double(y), s(z)) maplog(xs) -> mapIter(xs, nil) mapIter(xs, ys) -> ifmap(isempty(xs), xs, ys) ifmap(true, xs, ys) -> ys ifmap(false, xs, ys) -> mapIter(droplast(xs), cons(log(last(xs)), ys)) isempty(nil) -> true isempty(cons(x, xs)) -> false last(nil) -> error last(cons(x, nil)) -> x last(cons(x, cons(y, xs))) -> last(cons(y, xs)) droplast(nil) -> nil droplast(cons(x, nil)) -> nil droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))) 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: le(s(z0), 0) -> false le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0) -> 0 double(s(z0)) -> s(s(double(z0))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Tuples: LE(s(z0), 0) -> c1 LE(0, z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0) -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0) -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 S tuples: LE(s(z0), 0) -> c1 LE(0, z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0) -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0) -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 K tuples:none Defined Rule Symbols: le_2, double_1, log_1, loop_3, if_4, maplog_1, mapIter_2, ifmap_3, isempty_1, last_1, droplast_1, a Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LOOP_3, IF_4, MAPLOG_1, MAPITER_2, IFMAP_3, ISEMPTY_1, LAST_1, DROPLAST_1, A Compound Symbols: c1, c2, c3_1, c4, c5_1, c6, c7_1, c8_2, c9, c10_2, c11_1, c12_2, c13, c14_2, c15_3, c16, c17, c18, c19, c20_1, c21, c22, c23_1, c24, c25 ---------------------------------------- (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: LE(s(z0), 0) -> c1 LE(0, z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0) -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0) -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 The (relative) TRS S consists of the following rules: le(s(z0), 0) -> false le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0) -> 0 double(s(z0)) -> s(s(double(z0))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(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: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 The (relative) TRS S consists of the following rules: le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Rewrite Strategy: INNERMOST ---------------------------------------- (11) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (12) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 ---------------------------------------- (13) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: LE, DOUBLE, LOOP, le, double, MAPITER, droplast, last, DROPLAST, LAST, loop, mapIter They will be analysed ascendingly in the following order: LE < LOOP DOUBLE < LOOP le < LOOP double < LOOP le < loop double < loop droplast < MAPITER last < MAPITER DROPLAST < MAPITER LAST < MAPITER droplast < mapIter last < mapIter ---------------------------------------- (14) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: LE, DOUBLE, LOOP, le, double, MAPITER, droplast, last, DROPLAST, LAST, loop, mapIter They will be analysed ascendingly in the following order: LE < LOOP DOUBLE < LOOP le < LOOP double < LOOP le < loop double < loop droplast < MAPITER last < MAPITER DROPLAST < MAPITER LAST < MAPITER droplast < mapIter last < mapIter ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26)) -> gen_c1:c2:c317_26(n24_26), rt in Omega(1 + n24_26) Induction Base: LE(gen_s:0':logError:error18_26(+(1, 0)), gen_s:0':logError:error18_26(0)) ->_R^Omega(1) c1 Induction Step: LE(gen_s:0':logError:error18_26(+(1, +(n24_26, 1))), gen_s:0':logError:error18_26(+(n24_26, 1))) ->_R^Omega(1) c3(LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26))) ->_IH c3(gen_c1:c2:c317_26(c25_26)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (16) Complex Obligation (BEST) ---------------------------------------- (17) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: LE, DOUBLE, LOOP, le, double, MAPITER, droplast, last, DROPLAST, LAST, loop, mapIter They will be analysed ascendingly in the following order: LE < LOOP DOUBLE < LOOP le < LOOP double < LOOP le < loop double < loop droplast < MAPITER last < MAPITER DROPLAST < MAPITER LAST < MAPITER droplast < mapIter last < mapIter ---------------------------------------- (18) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (19) BOUNDS(n^1, INF) ---------------------------------------- (20) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Lemmas: LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26)) -> gen_c1:c2:c317_26(n24_26), rt in Omega(1 + n24_26) Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: DOUBLE, LOOP, le, double, MAPITER, droplast, last, DROPLAST, LAST, loop, mapIter They will be analysed ascendingly in the following order: DOUBLE < LOOP le < LOOP double < LOOP le < loop double < loop droplast < MAPITER last < MAPITER DROPLAST < MAPITER LAST < MAPITER droplast < mapIter last < mapIter ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: DOUBLE(gen_s:0':logError:error18_26(n845_26)) -> gen_c4:c519_26(n845_26), rt in Omega(1 + n845_26) Induction Base: DOUBLE(gen_s:0':logError:error18_26(0)) ->_R^Omega(1) c4 Induction Step: DOUBLE(gen_s:0':logError:error18_26(+(n845_26, 1))) ->_R^Omega(1) c5(DOUBLE(gen_s:0':logError:error18_26(n845_26))) ->_IH c5(gen_c4:c519_26(c846_26)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (22) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Lemmas: LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26)) -> gen_c1:c2:c317_26(n24_26), rt in Omega(1 + n24_26) DOUBLE(gen_s:0':logError:error18_26(n845_26)) -> gen_c4:c519_26(n845_26), rt in Omega(1 + n845_26) Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: le, LOOP, double, MAPITER, droplast, last, DROPLAST, LAST, loop, mapIter They will be analysed ascendingly in the following order: le < LOOP double < LOOP le < loop double < loop droplast < MAPITER last < MAPITER DROPLAST < MAPITER LAST < MAPITER droplast < mapIter last < mapIter ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: le(gen_s:0':logError:error18_26(+(1, n1331_26)), gen_s:0':logError:error18_26(n1331_26)) -> false, rt in Omega(0) Induction Base: le(gen_s:0':logError:error18_26(+(1, 0)), gen_s:0':logError:error18_26(0)) ->_R^Omega(0) false Induction Step: le(gen_s:0':logError:error18_26(+(1, +(n1331_26, 1))), gen_s:0':logError:error18_26(+(n1331_26, 1))) ->_R^Omega(0) le(gen_s:0':logError:error18_26(+(1, n1331_26)), gen_s:0':logError:error18_26(n1331_26)) ->_IH false 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: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Lemmas: LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26)) -> gen_c1:c2:c317_26(n24_26), rt in Omega(1 + n24_26) DOUBLE(gen_s:0':logError:error18_26(n845_26)) -> gen_c4:c519_26(n845_26), rt in Omega(1 + n845_26) le(gen_s:0':logError:error18_26(+(1, n1331_26)), gen_s:0':logError:error18_26(n1331_26)) -> false, rt in Omega(0) Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: double, LOOP, MAPITER, droplast, last, DROPLAST, LAST, loop, mapIter They will be analysed ascendingly in the following order: double < LOOP double < loop droplast < MAPITER last < MAPITER DROPLAST < MAPITER LAST < MAPITER droplast < mapIter last < mapIter ---------------------------------------- (25) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: double(gen_s:0':logError:error18_26(n1896_26)) -> gen_s:0':logError:error18_26(*(2, n1896_26)), rt in Omega(0) Induction Base: double(gen_s:0':logError:error18_26(0)) ->_R^Omega(0) 0' Induction Step: double(gen_s:0':logError:error18_26(+(n1896_26, 1))) ->_R^Omega(0) s(s(double(gen_s:0':logError:error18_26(n1896_26)))) ->_IH s(s(gen_s:0':logError:error18_26(*(2, c1897_26)))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (26) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Lemmas: LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26)) -> gen_c1:c2:c317_26(n24_26), rt in Omega(1 + n24_26) DOUBLE(gen_s:0':logError:error18_26(n845_26)) -> gen_c4:c519_26(n845_26), rt in Omega(1 + n845_26) le(gen_s:0':logError:error18_26(+(1, n1331_26)), gen_s:0':logError:error18_26(n1331_26)) -> false, rt in Omega(0) double(gen_s:0':logError:error18_26(n1896_26)) -> gen_s:0':logError:error18_26(*(2, n1896_26)), rt in Omega(0) Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: LOOP, MAPITER, droplast, last, DROPLAST, LAST, loop, mapIter They will be analysed ascendingly in the following order: droplast < MAPITER last < MAPITER DROPLAST < MAPITER LAST < MAPITER droplast < mapIter last < mapIter ---------------------------------------- (27) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: droplast(gen_nil:cons20_26(+(1, n15999_26))) -> gen_nil:cons20_26(n15999_26), rt in Omega(0) Induction Base: droplast(gen_nil:cons20_26(+(1, 0))) ->_R^Omega(0) nil Induction Step: droplast(gen_nil:cons20_26(+(1, +(n15999_26, 1)))) ->_R^Omega(0) cons(0', droplast(cons(0', gen_nil:cons20_26(n15999_26)))) ->_IH cons(0', gen_nil:cons20_26(c16000_26)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (28) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Lemmas: LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26)) -> gen_c1:c2:c317_26(n24_26), rt in Omega(1 + n24_26) DOUBLE(gen_s:0':logError:error18_26(n845_26)) -> gen_c4:c519_26(n845_26), rt in Omega(1 + n845_26) le(gen_s:0':logError:error18_26(+(1, n1331_26)), gen_s:0':logError:error18_26(n1331_26)) -> false, rt in Omega(0) double(gen_s:0':logError:error18_26(n1896_26)) -> gen_s:0':logError:error18_26(*(2, n1896_26)), rt in Omega(0) droplast(gen_nil:cons20_26(+(1, n15999_26))) -> gen_nil:cons20_26(n15999_26), rt in Omega(0) Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: last, MAPITER, DROPLAST, LAST, loop, mapIter They will be analysed ascendingly in the following order: last < MAPITER DROPLAST < MAPITER LAST < MAPITER last < mapIter ---------------------------------------- (29) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: last(gen_nil:cons20_26(+(1, n16668_26))) -> gen_s:0':logError:error18_26(0), rt in Omega(0) Induction Base: last(gen_nil:cons20_26(+(1, 0))) ->_R^Omega(0) 0' Induction Step: last(gen_nil:cons20_26(+(1, +(n16668_26, 1)))) ->_R^Omega(0) last(cons(0', gen_nil:cons20_26(n16668_26))) ->_IH gen_s:0':logError:error18_26(0) 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: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Lemmas: LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26)) -> gen_c1:c2:c317_26(n24_26), rt in Omega(1 + n24_26) DOUBLE(gen_s:0':logError:error18_26(n845_26)) -> gen_c4:c519_26(n845_26), rt in Omega(1 + n845_26) le(gen_s:0':logError:error18_26(+(1, n1331_26)), gen_s:0':logError:error18_26(n1331_26)) -> false, rt in Omega(0) double(gen_s:0':logError:error18_26(n1896_26)) -> gen_s:0':logError:error18_26(*(2, n1896_26)), rt in Omega(0) droplast(gen_nil:cons20_26(+(1, n15999_26))) -> gen_nil:cons20_26(n15999_26), rt in Omega(0) last(gen_nil:cons20_26(+(1, n16668_26))) -> gen_s:0':logError:error18_26(0), rt in Omega(0) Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: DROPLAST, MAPITER, LAST, loop, mapIter They will be analysed ascendingly in the following order: DROPLAST < MAPITER LAST < MAPITER ---------------------------------------- (31) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: DROPLAST(gen_nil:cons20_26(+(2, n17355_26))) -> *23_26, rt in Omega(n17355_26) Induction Base: DROPLAST(gen_nil:cons20_26(+(2, 0))) Induction Step: DROPLAST(gen_nil:cons20_26(+(2, +(n17355_26, 1)))) ->_R^Omega(1) c23(DROPLAST(cons(0', gen_nil:cons20_26(+(1, n17355_26))))) ->_IH c23(*23_26) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (32) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c1 LE(0', z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0') -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0') -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Types: LE :: s:0':logError:error -> s:0':logError:error -> c1:c2:c3 s :: s:0':logError:error -> s:0':logError:error 0' :: s:0':logError:error c1 :: c1:c2:c3 c2 :: c1:c2:c3 c3 :: c1:c2:c3 -> c1:c2:c3 DOUBLE :: s:0':logError:error -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 -> c4:c5 LOG :: s:0':logError:error -> c6:c7 c6 :: c6:c7 c7 :: c8 -> c6:c7 LOOP :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c8 c8 :: c9:c10 -> c1:c2:c3 -> c8 IF :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> c9:c10 le :: s:0':logError:error -> s:0':logError:error -> true:false true :: true:false c9 :: c9:c10 false :: true:false c10 :: c8 -> c4:c5 -> c9:c10 double :: s:0':logError:error -> s:0':logError:error MAPLOG :: nil:cons -> c11 c11 :: c12 -> c11 MAPITER :: nil:cons -> nil:cons -> c12 nil :: nil:cons c12 :: c13:c14:c15 -> c16:c17 -> c12 IFMAP :: true:false -> nil:cons -> nil:cons -> c13:c14:c15 isempty :: nil:cons -> true:false ISEMPTY :: nil:cons -> c16:c17 c13 :: c13:c14:c15 c14 :: c12 -> c21:c22:c23 -> c13:c14:c15 droplast :: nil:cons -> nil:cons cons :: s:0':logError:error -> nil:cons -> nil:cons log :: s:0':logError:error -> s:0':logError:error last :: nil:cons -> s:0':logError:error DROPLAST :: nil:cons -> c21:c22:c23 c15 :: c12 -> c6:c7 -> c18:c19:c20 -> c13:c14:c15 LAST :: nil:cons -> c18:c19:c20 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19:c20 c19 :: c18:c19:c20 c20 :: c18:c19:c20 -> c18:c19:c20 c21 :: c21:c22:c23 c22 :: c21:c22:c23 c23 :: c21:c22:c23 -> c21:c22:c23 A :: c24:c25 c24 :: c24:c25 c25 :: c24:c25 logError :: s:0':logError:error loop :: s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error if :: true:false -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error -> s:0':logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons ifmap :: true:false -> nil:cons -> nil:cons -> nil:cons error :: s:0':logError:error a :: b:c b :: b:c c :: b:c hole_c1:c2:c31_26 :: c1:c2:c3 hole_s:0':logError:error2_26 :: s:0':logError:error hole_c4:c53_26 :: c4:c5 hole_c6:c74_26 :: c6:c7 hole_c85_26 :: c8 hole_c9:c106_26 :: c9:c10 hole_true:false7_26 :: true:false hole_c118_26 :: c11 hole_nil:cons9_26 :: nil:cons hole_c1210_26 :: c12 hole_c13:c14:c1511_26 :: c13:c14:c15 hole_c16:c1712_26 :: c16:c17 hole_c21:c22:c2313_26 :: c21:c22:c23 hole_c18:c19:c2014_26 :: c18:c19:c20 hole_c24:c2515_26 :: c24:c25 hole_b:c16_26 :: b:c gen_c1:c2:c317_26 :: Nat -> c1:c2:c3 gen_s:0':logError:error18_26 :: Nat -> s:0':logError:error gen_c4:c519_26 :: Nat -> c4:c5 gen_nil:cons20_26 :: Nat -> nil:cons gen_c21:c22:c2321_26 :: Nat -> c21:c22:c23 gen_c18:c19:c2022_26 :: Nat -> c18:c19:c20 Lemmas: LE(gen_s:0':logError:error18_26(+(1, n24_26)), gen_s:0':logError:error18_26(n24_26)) -> gen_c1:c2:c317_26(n24_26), rt in Omega(1 + n24_26) DOUBLE(gen_s:0':logError:error18_26(n845_26)) -> gen_c4:c519_26(n845_26), rt in Omega(1 + n845_26) le(gen_s:0':logError:error18_26(+(1, n1331_26)), gen_s:0':logError:error18_26(n1331_26)) -> false, rt in Omega(0) double(gen_s:0':logError:error18_26(n1896_26)) -> gen_s:0':logError:error18_26(*(2, n1896_26)), rt in Omega(0) droplast(gen_nil:cons20_26(+(1, n15999_26))) -> gen_nil:cons20_26(n15999_26), rt in Omega(0) last(gen_nil:cons20_26(+(1, n16668_26))) -> gen_s:0':logError:error18_26(0), rt in Omega(0) DROPLAST(gen_nil:cons20_26(+(2, n17355_26))) -> *23_26, rt in Omega(n17355_26) Generator Equations: gen_c1:c2:c317_26(0) <=> c1 gen_c1:c2:c317_26(+(x, 1)) <=> c3(gen_c1:c2:c317_26(x)) gen_s:0':logError:error18_26(0) <=> 0' gen_s:0':logError:error18_26(+(x, 1)) <=> s(gen_s:0':logError:error18_26(x)) gen_c4:c519_26(0) <=> c4 gen_c4:c519_26(+(x, 1)) <=> c5(gen_c4:c519_26(x)) gen_nil:cons20_26(0) <=> nil gen_nil:cons20_26(+(x, 1)) <=> cons(0', gen_nil:cons20_26(x)) gen_c21:c22:c2321_26(0) <=> c21 gen_c21:c22:c2321_26(+(x, 1)) <=> c23(gen_c21:c22:c2321_26(x)) gen_c18:c19:c2022_26(0) <=> c18 gen_c18:c19:c2022_26(+(x, 1)) <=> c20(gen_c18:c19:c2022_26(x)) The following defined symbols remain to be analysed: LAST, MAPITER, loop, mapIter They will be analysed ascendingly in the following order: LAST < MAPITER ---------------------------------------- (33) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (34) 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: le(s(x), 0) -> false [1] le(0, y) -> true [1] le(s(x), s(y)) -> le(x, y) [1] double(0) -> 0 [1] double(s(x)) -> s(s(double(x))) [1] log(0) -> logError [1] log(s(x)) -> loop(s(x), s(0), 0) [1] loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z) [1] if(true, x, y, z) -> z [1] if(false, x, y, z) -> loop(x, double(y), s(z)) [1] maplog(xs) -> mapIter(xs, nil) [1] mapIter(xs, ys) -> ifmap(isempty(xs), xs, ys) [1] ifmap(true, xs, ys) -> ys [1] ifmap(false, xs, ys) -> mapIter(droplast(xs), cons(log(last(xs)), ys)) [1] isempty(nil) -> true [1] isempty(cons(x, xs)) -> false [1] last(nil) -> error [1] last(cons(x, nil)) -> x [1] last(cons(x, cons(y, xs))) -> last(cons(y, xs)) [1] droplast(nil) -> nil [1] droplast(cons(x, nil)) -> nil [1] droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))) [1] a -> b [1] a -> c [1] Rewrite Strategy: INNERMOST ---------------------------------------- (35) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (36) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: le(s(x), 0) -> false [1] le(0, y) -> true [1] le(s(x), s(y)) -> le(x, y) [1] double(0) -> 0 [1] double(s(x)) -> s(s(double(x))) [1] log(0) -> logError [1] log(s(x)) -> loop(s(x), s(0), 0) [1] loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z) [1] if(true, x, y, z) -> z [1] if(false, x, y, z) -> loop(x, double(y), s(z)) [1] maplog(xs) -> mapIter(xs, nil) [1] mapIter(xs, ys) -> ifmap(isempty(xs), xs, ys) [1] ifmap(true, xs, ys) -> ys [1] ifmap(false, xs, ys) -> mapIter(droplast(xs), cons(log(last(xs)), ys)) [1] isempty(nil) -> true [1] isempty(cons(x, xs)) -> false [1] last(nil) -> error [1] last(cons(x, nil)) -> x [1] last(cons(x, cons(y, xs))) -> last(cons(y, xs)) [1] droplast(nil) -> nil [1] droplast(cons(x, nil)) -> nil [1] droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))) [1] a -> b [1] a -> c [1] The TRS has the following type information: le :: s:0:logError:error -> s:0:logError:error -> false:true s :: s:0:logError:error -> s:0:logError:error 0 :: s:0:logError:error false :: false:true true :: false:true double :: s:0:logError:error -> s:0:logError:error log :: s:0:logError:error -> s:0:logError:error logError :: s:0:logError:error loop :: s:0:logError:error -> s:0:logError:error -> s:0:logError:error -> s:0:logError:error if :: false:true -> s:0:logError:error -> s:0:logError:error -> s:0:logError:error -> s:0:logError:error maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons nil :: nil:cons ifmap :: false:true -> nil:cons -> nil:cons -> nil:cons isempty :: nil:cons -> false:true droplast :: nil:cons -> nil:cons cons :: s:0:logError:error -> nil:cons -> nil:cons last :: nil:cons -> s:0:logError:error error :: s:0:logError:error a :: b:c b :: b:c c :: b:c Rewrite Strategy: INNERMOST ---------------------------------------- (37) 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: maplog_1 mapIter_2 ifmap_3 a (c) The following functions are completely defined: droplast_1 log_1 last_1 le_2 double_1 isempty_1 loop_3 if_4 Due to the following rules being added: log(v0) -> null_log [0] le(v0, v1) -> null_le [0] double(v0) -> null_double [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] And the following fresh constants: null_log, null_le, null_double, null_loop, null_if ---------------------------------------- (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: le(s(x), 0) -> false [1] le(0, y) -> true [1] le(s(x), s(y)) -> le(x, y) [1] double(0) -> 0 [1] double(s(x)) -> s(s(double(x))) [1] log(0) -> logError [1] log(s(x)) -> loop(s(x), s(0), 0) [1] loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z) [1] if(true, x, y, z) -> z [1] if(false, x, y, z) -> loop(x, double(y), s(z)) [1] maplog(xs) -> mapIter(xs, nil) [1] mapIter(xs, ys) -> ifmap(isempty(xs), xs, ys) [1] ifmap(true, xs, ys) -> ys [1] ifmap(false, xs, ys) -> mapIter(droplast(xs), cons(log(last(xs)), ys)) [1] isempty(nil) -> true [1] isempty(cons(x, xs)) -> false [1] last(nil) -> error [1] last(cons(x, nil)) -> x [1] last(cons(x, cons(y, xs))) -> last(cons(y, xs)) [1] droplast(nil) -> nil [1] droplast(cons(x, nil)) -> nil [1] droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))) [1] a -> b [1] a -> c [1] log(v0) -> null_log [0] le(v0, v1) -> null_le [0] double(v0) -> null_double [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] The TRS has the following type information: le :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> false:true:null_le s :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if 0 :: s:0:logError:error:null_log:null_double:null_loop:null_if false :: false:true:null_le true :: false:true:null_le double :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if log :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if logError :: s:0:logError:error:null_log:null_double:null_loop:null_if loop :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if if :: false:true:null_le -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons nil :: nil:cons ifmap :: false:true:null_le -> nil:cons -> nil:cons -> nil:cons isempty :: nil:cons -> false:true:null_le droplast :: nil:cons -> nil:cons cons :: s:0:logError:error:null_log:null_double:null_loop:null_if -> nil:cons -> nil:cons last :: nil:cons -> s:0:logError:error:null_log:null_double:null_loop:null_if error :: s:0:logError:error:null_log:null_double:null_loop:null_if a :: b:c b :: b:c c :: b:c null_log :: s:0:logError:error:null_log:null_double:null_loop:null_if null_le :: false:true:null_le null_double :: s:0:logError:error:null_log:null_double:null_loop:null_if null_loop :: s:0:logError:error:null_log:null_double:null_loop:null_if null_if :: s:0:logError:error:null_log:null_double:null_loop:null_if Rewrite Strategy: INNERMOST ---------------------------------------- (39) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (40) 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: le(s(x), 0) -> false [1] le(0, y) -> true [1] le(s(x), s(y)) -> le(x, y) [1] double(0) -> 0 [1] double(s(x)) -> s(s(double(x))) [1] log(0) -> logError [1] log(s(x)) -> loop(s(x), s(0), 0) [1] loop(0, s(y), z) -> if(true, 0, s(y), z) [2] loop(s(x'), s(y), z) -> if(le(x', y), s(x'), s(y), z) [2] loop(x, s(y), z) -> if(null_le, x, s(y), z) [1] if(true, x, y, z) -> z [1] if(false, x, 0, z) -> loop(x, 0, s(z)) [2] if(false, x, s(x''), z) -> loop(x, s(s(double(x''))), s(z)) [2] if(false, x, y, z) -> loop(x, null_double, s(z)) [1] maplog(xs) -> mapIter(xs, nil) [1] mapIter(nil, ys) -> ifmap(true, nil, ys) [2] mapIter(cons(x1, xs'), ys) -> ifmap(false, cons(x1, xs'), ys) [2] ifmap(true, xs, ys) -> ys [1] ifmap(false, nil, ys) -> mapIter(nil, cons(log(error), ys)) [3] ifmap(false, cons(x2, nil), ys) -> mapIter(nil, cons(log(x2), ys)) [3] ifmap(false, cons(x3, cons(y', xs'')), ys) -> mapIter(cons(x3, droplast(cons(y', xs''))), cons(log(last(cons(y', xs''))), ys)) [3] isempty(nil) -> true [1] isempty(cons(x, xs)) -> false [1] last(nil) -> error [1] last(cons(x, nil)) -> x [1] last(cons(x, cons(y, xs))) -> last(cons(y, xs)) [1] droplast(nil) -> nil [1] droplast(cons(x, nil)) -> nil [1] droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))) [1] a -> b [1] a -> c [1] log(v0) -> null_log [0] le(v0, v1) -> null_le [0] double(v0) -> null_double [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] The TRS has the following type information: le :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> false:true:null_le s :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if 0 :: s:0:logError:error:null_log:null_double:null_loop:null_if false :: false:true:null_le true :: false:true:null_le double :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if log :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if logError :: s:0:logError:error:null_log:null_double:null_loop:null_if loop :: s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if if :: false:true:null_le -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if -> s:0:logError:error:null_log:null_double:null_loop:null_if maplog :: nil:cons -> nil:cons mapIter :: nil:cons -> nil:cons -> nil:cons nil :: nil:cons ifmap :: false:true:null_le -> nil:cons -> nil:cons -> nil:cons isempty :: nil:cons -> false:true:null_le droplast :: nil:cons -> nil:cons cons :: s:0:logError:error:null_log:null_double:null_loop:null_if -> nil:cons -> nil:cons last :: nil:cons -> s:0:logError:error:null_log:null_double:null_loop:null_if error :: s:0:logError:error:null_log:null_double:null_loop:null_if a :: b:c b :: b:c c :: b:c null_log :: s:0:logError:error:null_log:null_double:null_loop:null_if null_le :: false:true:null_le null_double :: s:0:logError:error:null_log:null_double:null_loop:null_if null_loop :: s:0:logError:error:null_log:null_double:null_loop:null_if null_if :: s:0:logError:error:null_log:null_double:null_loop:null_if Rewrite Strategy: INNERMOST ---------------------------------------- (41) 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 false => 1 true => 2 logError => 2 nil => 0 error => 1 b => 0 c => 1 null_log => 0 null_le => 0 null_double => 0 null_loop => 0 null_if => 0 ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 double(z') -{ 1 }-> 1 + (1 + double(x)) :|: z' = 1 + x, x >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: x >= 0, z' = 1 + x + 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x if(z', z'', z1, z2) -{ 2 }-> loop(x, 0, 1 + z) :|: z1 = 0, z >= 0, z2 = z, x >= 0, z'' = x, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(x, 0, 1 + z) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(x, 1 + (1 + double(x'')), 1 + z) :|: z >= 0, z1 = 1 + x'', z2 = z, x >= 0, z'' = x, z' = 1, x'' >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z2 = v3, v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, v3 >= 0, z' = v0 ifmap(z', z'', z1) -{ 1 }-> ys :|: xs >= 0, z' = 2, ys >= 0, z'' = xs, z1 = ys ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(x2) + ys) :|: z'' = 1 + x2 + 0, ys >= 0, z' = 1, x2 >= 0, z1 = ys ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + ys) :|: z'' = 0, ys >= 0, z' = 1, z1 = ys ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + ys) :|: ys >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0, z1 = ys isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> x :|: x >= 0, z' = 1 + x + 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 le(z', z'') -{ 1 }-> le(x, y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y le(z', z'') -{ 1 }-> 2 :|: z'' = y, y >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' = 1 + x, x >= 0 le(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 log(z') -{ 1 }-> loop(1 + x, 1 + 0, 0) :|: z' = 1 + x, x >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 loop(z', z'', z1) -{ 2 }-> if(le(x', y), 1 + x', 1 + y, z) :|: z1 = z, z >= 0, z' = 1 + x', x' >= 0, y >= 0, z'' = 1 + y loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + y, z) :|: z1 = z, z >= 0, y >= 0, z'' = 1 + y, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, x, 1 + y, z) :|: z1 = z, z >= 0, z' = x, x >= 0, y >= 0, z'' = 1 + y loop(z', z'', z1) -{ 0 }-> 0 :|: v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, z' = v0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, ys) :|: ys >= 0, z'' = ys, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', ys) :|: x1 >= 0, z' = 1 + x1 + xs', ys >= 0, xs' >= 0, z'' = ys maplog(z') -{ 1 }-> mapIter(xs, 0) :|: xs >= 0, z' = xs ---------------------------------------- (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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + z1) :|: z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 1 }-> le(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 2 }-> if(le(z' - 1, z'' - 1), 1 + (z' - 1), 1 + (z'' - 1), z1) :|: z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 ---------------------------------------- (45) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { le } { droplast } { double } { isempty } { last } { a } { if, loop } { log } { ifmap, mapIter } { maplog } ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + z1) :|: z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 1 }-> le(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 2 }-> if(le(z' - 1, z'' - 1), 1 + (z' - 1), 1 + (z'' - 1), z1) :|: z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {le}, {droplast}, {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} ---------------------------------------- (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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + z1) :|: z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 1 }-> le(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 2 }-> if(le(z' - 1, z'' - 1), 1 + (z' - 1), 1 + (z'' - 1), z1) :|: z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {le}, {droplast}, {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} ---------------------------------------- (49) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: le 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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + z1) :|: z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 1 }-> le(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 2 }-> if(le(z' - 1, z'' - 1), 1 + (z' - 1), 1 + (z'' - 1), z1) :|: z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {le}, {droplast}, {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: ?, size: O(1) [2] ---------------------------------------- (51) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: le after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z'' ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + z1) :|: z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 1 }-> le(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 2 }-> if(le(z' - 1, z'' - 1), 1 + (z' - 1), 1 + (z'' - 1), z1) :|: z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {droplast}, {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + 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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + z1) :|: z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {droplast}, {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] ---------------------------------------- (55) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: droplast after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + z1) :|: z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {droplast}, {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: ?, size: O(n^1) [z'] ---------------------------------------- (57) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: droplast 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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(1 + x3 + droplast(1 + y' + xs''), 1 + log(last(1 + y' + xs'')) + z1) :|: z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] ---------------------------------------- (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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] ---------------------------------------- (61) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: double after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z' ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {double}, {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: ?, size: O(n^1) [2*z'] ---------------------------------------- (63) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: double 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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 }-> 1 + (1 + double(z' - 1)) :|: z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 1 + (1 + double(z1 - 1)), 1 + z2) :|: z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] ---------------------------------------- (67) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isempty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {isempty}, {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: ?, size: O(1) [2] ---------------------------------------- (69) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isempty 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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (73) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: last after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z' ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {last}, {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] last: runtime: ?, size: O(n^1) [1 + z'] ---------------------------------------- (75) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: last after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 6 + xs'' + y' }-> mapIter(1 + x3 + s'', 1 + log(last(1 + y' + xs'')) + z1) :|: s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] last: runtime: O(n^1) [2 + z'], size: O(n^1) [1 + z'] ---------------------------------------- (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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 9 + 2*xs'' + 2*y' }-> mapIter(1 + x3 + s'', 1 + log(s4) + z1) :|: s4 >= 0, s4 <= 1 + y' + xs'' + 1, s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 4 + xs + y }-> s5 :|: s5 >= 0, s5 <= 1 + y + xs + 1, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] last: runtime: O(n^1) [2 + z'], size: O(n^1) [1 + z'] ---------------------------------------- (79) 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 ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 9 + 2*xs'' + 2*y' }-> mapIter(1 + x3 + s'', 1 + log(s4) + z1) :|: s4 >= 0, s4 <= 1 + y' + xs'' + 1, s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 4 + xs + y }-> s5 :|: s5 >= 0, s5 <= 1 + y + xs + 1, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {a}, {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] last: runtime: O(n^1) [2 + z'], size: O(n^1) [1 + z'] a: runtime: ?, size: O(1) [1] ---------------------------------------- (81) 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 ---------------------------------------- (82) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 9 + 2*xs'' + 2*y' }-> mapIter(1 + x3 + s'', 1 + log(s4) + z1) :|: s4 >= 0, s4 <= 1 + y' + xs'' + 1, s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 4 + xs + y }-> s5 :|: s5 >= 0, s5 <= 1 + y + xs + 1, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] last: runtime: O(n^1) [2 + z'], size: O(n^1) [1 + z'] a: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (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 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 9 + 2*xs'' + 2*y' }-> mapIter(1 + x3 + s'', 1 + log(s4) + z1) :|: s4 >= 0, s4 <= 1 + y' + xs'' + 1, s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 4 + xs + y }-> s5 :|: s5 >= 0, s5 <= 1 + y + xs + 1, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] last: runtime: O(n^1) [2 + z'], size: O(n^1) [1 + z'] a: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (85) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: loop after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (86) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 9 + 2*xs'' + 2*y' }-> mapIter(1 + x3 + s'', 1 + log(s4) + z1) :|: s4 >= 0, s4 <= 1 + y' + xs'' + 1, s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 4 + xs + y }-> s5 :|: s5 >= 0, s5 <= 1 + y + xs + 1, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] last: runtime: O(n^1) [2 + z'], size: O(n^1) [1 + z'] a: runtime: O(1) [1], size: O(1) [1] if: runtime: ?, size: INF loop: runtime: ?, size: INF ---------------------------------------- (87) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (88) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: z' >= 0 double(z') -{ 1 + z' }-> 1 + (1 + s2) :|: s2 >= 0, s2 <= 2 * (z' - 1), z' - 1 >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: z' - 1 >= 0 droplast(z') -{ 4 + xs + y }-> 1 + x + s1 :|: s1 >= 0, s1 <= 1 + y + xs, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z2 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 2 }-> loop(z'', 0, 1 + z2) :|: z1 = 0, z2 >= 0, z'' >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> loop(z'', 0, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 2 + z1 }-> loop(z'', 1 + (1 + s3), 1 + z2) :|: s3 >= 0, s3 <= 2 * (z1 - 1), z2 >= 0, z'' >= 0, z' = 1, z1 - 1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 ifmap(z', z'', z1) -{ 1 }-> z1 :|: z'' >= 0, z' = 2, z1 >= 0 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(1) + z1) :|: z'' = 0, z1 >= 0, z' = 1 ifmap(z', z'', z1) -{ 3 }-> mapIter(0, 1 + log(z'' - 1) + z1) :|: z1 >= 0, z' = 1, z'' - 1 >= 0 ifmap(z', z'', z1) -{ 9 + 2*xs'' + 2*y' }-> mapIter(1 + x3 + s'', 1 + log(s4) + z1) :|: s4 >= 0, s4 <= 1 + y' + xs'' + 1, s'' >= 0, s'' <= 1 + y' + xs'', z1 >= 0, xs'' >= 0, y' >= 0, z' = 1, z'' = 1 + x3 + (1 + y' + xs''), x3 >= 0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 last(z') -{ 4 + xs + y }-> s5 :|: s5 >= 0, s5 <= 1 + y + xs + 1, xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 le(z', z'') -{ 2 + z'' }-> s :|: s >= 0, s <= 2, z' - 1 >= 0, z'' - 1 >= 0 le(z', z'') -{ 1 }-> 2 :|: z'' >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' - 1 >= 0 le(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 log(z') -{ 1 }-> loop(1 + (z' - 1), 1 + 0, 0) :|: z' - 1 >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: z' >= 0 loop(z', z'', z1) -{ 3 + z'' }-> if(s', 1 + (z' - 1), 1 + (z'' - 1), z1) :|: s' >= 0, s' <= 2, z1 >= 0, z' - 1 >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 2 }-> if(2, 0, 1 + (z'' - 1), z1) :|: z1 >= 0, z'' - 1 >= 0, z' = 0 loop(z', z'', z1) -{ 1 }-> if(0, z', 1 + (z'' - 1), z1) :|: z1 >= 0, z' >= 0, z'' - 1 >= 0 loop(z', z'', z1) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0 mapIter(z', z'') -{ 2 }-> ifmap(2, 0, z'') :|: z'' >= 0, z' = 0 mapIter(z', z'') -{ 2 }-> ifmap(1, 1 + x1 + xs', z'') :|: x1 >= 0, z' = 1 + x1 + xs', z'' >= 0, xs' >= 0 maplog(z') -{ 1 }-> mapIter(z', 0) :|: z' >= 0 Function symbols to be analyzed: {if,loop}, {log}, {ifmap,mapIter}, {maplog} Previous analysis results are: le: runtime: O(n^1) [2 + z''], size: O(1) [2] droplast: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] double: runtime: O(n^1) [1 + z'], size: O(n^1) [2*z'] isempty: runtime: O(1) [1], size: O(1) [2] last: runtime: O(n^1) [2 + z'], size: O(n^1) [1 + z'] a: runtime: O(1) [1], size: O(1) [1] if: runtime: INF, size: INF loop: 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: le(v0, v1) -> null_le [0] double(v0) -> null_double [0] log(v0) -> null_log [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] ifmap(v0, v1, v2) -> null_ifmap [0] isempty(v0) -> null_isempty [0] last(v0) -> null_last [0] droplast(v0) -> null_droplast [0] And the following fresh constants: null_le, null_double, null_log, null_loop, null_if, null_ifmap, null_isempty, null_last, null_droplast ---------------------------------------- (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: le(s(x), 0) -> false [1] le(0, y) -> true [1] le(s(x), s(y)) -> le(x, y) [1] double(0) -> 0 [1] double(s(x)) -> s(s(double(x))) [1] log(0) -> logError [1] log(s(x)) -> loop(s(x), s(0), 0) [1] loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z) [1] if(true, x, y, z) -> z [1] if(false, x, y, z) -> loop(x, double(y), s(z)) [1] maplog(xs) -> mapIter(xs, nil) [1] mapIter(xs, ys) -> ifmap(isempty(xs), xs, ys) [1] ifmap(true, xs, ys) -> ys [1] ifmap(false, xs, ys) -> mapIter(droplast(xs), cons(log(last(xs)), ys)) [1] isempty(nil) -> true [1] isempty(cons(x, xs)) -> false [1] last(nil) -> error [1] last(cons(x, nil)) -> x [1] last(cons(x, cons(y, xs))) -> last(cons(y, xs)) [1] droplast(nil) -> nil [1] droplast(cons(x, nil)) -> nil [1] droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))) [1] a -> b [1] a -> c [1] le(v0, v1) -> null_le [0] double(v0) -> null_double [0] log(v0) -> null_log [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] ifmap(v0, v1, v2) -> null_ifmap [0] isempty(v0) -> null_isempty [0] last(v0) -> null_last [0] droplast(v0) -> null_droplast [0] The TRS has the following type information: le :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> false:true:null_le:null_isempty s :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last 0 :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last false :: false:true:null_le:null_isempty true :: false:true:null_le:null_isempty double :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last log :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last logError :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last loop :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last if :: false:true:null_le:null_isempty -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last maplog :: nil:cons:null_ifmap:null_droplast -> nil:cons:null_ifmap:null_droplast mapIter :: nil:cons:null_ifmap:null_droplast -> nil:cons:null_ifmap:null_droplast -> nil:cons:null_ifmap:null_droplast nil :: nil:cons:null_ifmap:null_droplast ifmap :: false:true:null_le:null_isempty -> nil:cons:null_ifmap:null_droplast -> nil:cons:null_ifmap:null_droplast -> nil:cons:null_ifmap:null_droplast isempty :: nil:cons:null_ifmap:null_droplast -> false:true:null_le:null_isempty droplast :: nil:cons:null_ifmap:null_droplast -> nil:cons:null_ifmap:null_droplast cons :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last -> nil:cons:null_ifmap:null_droplast -> nil:cons:null_ifmap:null_droplast last :: nil:cons:null_ifmap:null_droplast -> s:0:logError:error:null_double:null_log:null_loop:null_if:null_last error :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last a :: b:c b :: b:c c :: b:c null_le :: false:true:null_le:null_isempty null_double :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last null_log :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last null_loop :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last null_if :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last null_ifmap :: nil:cons:null_ifmap:null_droplast null_isempty :: false:true:null_le:null_isempty null_last :: s:0:logError:error:null_double:null_log:null_loop:null_if:null_last null_droplast :: nil:cons:null_ifmap:null_droplast 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 false => 1 true => 2 logError => 2 nil => 0 error => 1 b => 0 c => 1 null_le => 0 null_double => 0 null_log => 0 null_loop => 0 null_if => 0 null_ifmap => 0 null_isempty => 0 null_last => 0 null_droplast => 0 ---------------------------------------- (92) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: double(z') -{ 1 }-> 0 :|: z' = 0 double(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 double(z') -{ 1 }-> 1 + (1 + double(x)) :|: z' = 1 + x, x >= 0 droplast(z') -{ 1 }-> 0 :|: z' = 0 droplast(z') -{ 1 }-> 0 :|: x >= 0, z' = 1 + x + 0 droplast(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 droplast(z') -{ 1 }-> 1 + x + droplast(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 if(z', z'', z1, z2) -{ 1 }-> z :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x if(z', z'', z1, z2) -{ 1 }-> loop(x, double(y), 1 + z) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z2 = v3, v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, v3 >= 0, z' = v0 ifmap(z', z'', z1) -{ 1 }-> ys :|: xs >= 0, z' = 2, ys >= 0, z'' = xs, z1 = ys ifmap(z', z'', z1) -{ 1 }-> mapIter(droplast(xs), 1 + log(last(xs)) + ys) :|: xs >= 0, ys >= 0, z'' = xs, z' = 1, z1 = ys ifmap(z', z'', z1) -{ 0 }-> 0 :|: v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, z' = v0 isempty(z') -{ 1 }-> 2 :|: z' = 0 isempty(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isempty(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 last(z') -{ 1 }-> x :|: x >= 0, z' = 1 + x + 0 last(z') -{ 1 }-> last(1 + y + xs) :|: xs >= 0, z' = 1 + x + (1 + y + xs), x >= 0, y >= 0 last(z') -{ 1 }-> 1 :|: z' = 0 last(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 le(z', z'') -{ 1 }-> le(x, y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y le(z', z'') -{ 1 }-> 2 :|: z'' = y, y >= 0, z' = 0 le(z', z'') -{ 1 }-> 1 :|: z'' = 0, z' = 1 + x, x >= 0 le(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 log(z') -{ 1 }-> loop(1 + x, 1 + 0, 0) :|: z' = 1 + x, x >= 0 log(z') -{ 1 }-> 2 :|: z' = 0 log(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 loop(z', z'', z1) -{ 1 }-> if(le(x, 1 + y), x, 1 + y, z) :|: z1 = z, z >= 0, z' = x, x >= 0, y >= 0, z'' = 1 + y loop(z', z'', z1) -{ 0 }-> 0 :|: v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, z' = v0 mapIter(z', z'') -{ 1 }-> ifmap(isempty(xs), xs, ys) :|: xs >= 0, ys >= 0, z'' = ys, z' = xs maplog(z') -{ 1 }-> mapIter(xs, 0) :|: xs >= 0, z' = xs 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: le(s(z0), 0) -> false le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0) -> 0 double(s(z0)) -> s(s(double(z0))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Tuples: LE(s(z0), 0) -> c1 LE(0, z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0) -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0) -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 S tuples: LE(s(z0), 0) -> c1 LE(0, z0) -> c2 LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(0) -> c4 DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(0) -> c6 LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c9 IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPLOG(z0) -> c11(MAPITER(z0, nil)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(true, z0, z1) -> c13 IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) ISEMPTY(nil) -> c16 ISEMPTY(cons(z0, z1)) -> c17 LAST(nil) -> c18 LAST(cons(z0, nil)) -> c19 LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(nil) -> c21 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) A -> c24 A -> c25 K tuples:none Defined Rule Symbols: le_2, double_1, log_1, loop_3, if_4, maplog_1, mapIter_2, ifmap_3, isempty_1, last_1, droplast_1, a Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LOOP_3, IF_4, MAPLOG_1, MAPITER_2, IFMAP_3, ISEMPTY_1, LAST_1, DROPLAST_1, A Compound Symbols: c1, c2, c3_1, c4, c5_1, c6, c7_1, c8_2, c9, c10_2, c11_1, c12_2, c13, c14_2, c15_3, c16, c17, c18, c19, c20_1, c21, c22, c23_1, c24, c25 ---------------------------------------- (95) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: MAPLOG(z0) -> c11(MAPITER(z0, nil)) Removed 14 trailing nodes: LAST(nil) -> c18 IF(true, z0, z1, z2) -> c9 LE(0, z0) -> c2 DROPLAST(cons(z0, nil)) -> c22 DROPLAST(nil) -> c21 LAST(cons(z0, nil)) -> c19 A -> c24 ISEMPTY(nil) -> c16 DOUBLE(0) -> c4 A -> c25 ISEMPTY(cons(z0, z1)) -> c17 LOG(0) -> c6 IFMAP(true, z0, z1) -> c13 LE(s(z0), 0) -> c1 ---------------------------------------- (96) Obligation: Complexity Dependency Tuples Problem Rules: le(s(z0), 0) -> false le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0) -> 0 double(s(z0)) -> s(s(double(z0))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1), ISEMPTY(z0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) K tuples:none Defined Rule Symbols: le_2, double_1, log_1, loop_3, if_4, maplog_1, mapIter_2, ifmap_3, isempty_1, last_1, droplast_1, a Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LOOP_3, IF_4, MAPITER_2, IFMAP_3, LAST_1, DROPLAST_1 Compound Symbols: c3_1, c5_1, c7_1, c8_2, c10_2, c12_2, c14_2, c15_3, c20_1, c23_1 ---------------------------------------- (97) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (98) Obligation: Complexity Dependency Tuples Problem Rules: le(s(z0), 0) -> false le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0) -> 0 double(s(z0)) -> s(s(double(z0))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) isempty(nil) -> true isempty(cons(z0, z1)) -> false last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) a -> b a -> c Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) K tuples:none Defined Rule Symbols: le_2, double_1, log_1, loop_3, if_4, maplog_1, mapIter_2, ifmap_3, isempty_1, last_1, droplast_1, a Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LOOP_3, IF_4, IFMAP_3, LAST_1, DROPLAST_1, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c8_2, c10_2, c14_2, c15_3, c20_1, c23_1, c12_1 ---------------------------------------- (99) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: maplog(z0) -> mapIter(z0, nil) mapIter(z0, z1) -> ifmap(isempty(z0), z0, z1) ifmap(true, z0, z1) -> z1 ifmap(false, z0, z1) -> mapIter(droplast(z0), cons(log(last(z0)), z1)) a -> b a -> c ---------------------------------------- (100) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LOOP_3, IF_4, IFMAP_3, LAST_1, DROPLAST_1, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c8_2, c10_2, c14_2, c15_3, c20_1, c23_1, c12_1 ---------------------------------------- (101) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (102) 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: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) The (relative) TRS S consists of the following rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Rewrite Strategy: INNERMOST ---------------------------------------- (103) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (104) 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: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (105) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (106) 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: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) [1] DOUBLE(s(z0)) -> c5(DOUBLE(z0)) [1] LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) [1] LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) [1] IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) [1] IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) [1] IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) [1] LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) [1] DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) [1] MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) [1] le(0, z0) -> true [0] le(s(z0), s(z1)) -> le(z0, z1) [0] le(s(z0), 0) -> false [0] double(0) -> 0 [0] double(s(z0)) -> s(s(double(z0))) [0] droplast(nil) -> nil [0] droplast(cons(z0, nil)) -> nil [0] droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) [0] log(0) -> logError [0] log(s(z0)) -> loop(s(z0), s(0), 0) [0] last(nil) -> error [0] last(cons(z0, nil)) -> z0 [0] last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) [0] loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) [0] if(true, z0, z1, z2) -> z2 [0] if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) [0] isempty(nil) -> true [0] isempty(cons(z0, z1)) -> false [0] Rewrite Strategy: INNERMOST ---------------------------------------- (107) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (108) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) [1] DOUBLE(s(z0)) -> c5(DOUBLE(z0)) [1] LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) [1] LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) [1] IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) [1] IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) [1] IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) [1] LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) [1] DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) [1] MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) [1] le(0, z0) -> true [0] le(s(z0), s(z1)) -> le(z0, z1) [0] le(s(z0), 0) -> false [0] double(0) -> 0 [0] double(s(z0)) -> s(s(double(z0))) [0] droplast(nil) -> nil [0] droplast(cons(z0, nil)) -> nil [0] droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) [0] log(0) -> logError [0] log(s(z0)) -> loop(s(z0), s(0), 0) [0] last(nil) -> error [0] last(cons(z0, nil)) -> z0 [0] last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) [0] loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) [0] if(true, z0, z1, z2) -> z2 [0] if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) [0] isempty(nil) -> true [0] isempty(cons(z0, z1)) -> false [0] The TRS has the following type information: LE :: s:0:logError:error -> s:0:logError:error -> c3 s :: s:0:logError:error -> s:0:logError:error c3 :: c3 -> c3 DOUBLE :: s:0:logError:error -> c5 c5 :: c5 -> c5 LOG :: s:0:logError:error -> c7 c7 :: c8 -> c7 LOOP :: s:0:logError:error -> s:0:logError:error -> s:0:logError:error -> c8 0 :: s:0:logError:error c8 :: c10 -> c3 -> c8 IF :: false:true -> s:0:logError:error -> s:0:logError:error -> s:0:logError:error -> c10 le :: s:0:logError:error -> s:0:logError:error -> false:true false :: false:true c10 :: c8 -> c5 -> c10 double :: s:0:logError:error -> s:0:logError:error IFMAP :: false:true -> cons:nil -> cons:nil -> c14:c15 c14 :: c12 -> c23 -> c14:c15 MAPITER :: cons:nil -> cons:nil -> c12 droplast :: cons:nil -> cons:nil cons :: s:0:logError:error -> cons:nil -> cons:nil log :: s:0:logError:error -> s:0:logError:error last :: cons:nil -> s:0:logError:error DROPLAST :: cons:nil -> c23 c15 :: c12 -> c7 -> c20 -> c14:c15 LAST :: cons:nil -> c20 c20 :: c20 -> c20 c23 :: c23 -> c23 c12 :: c14:c15 -> c12 isempty :: cons:nil -> false:true true :: false:true nil :: cons:nil logError :: s:0:logError:error loop :: s:0:logError:error -> s:0:logError:error -> s:0:logError:error -> s:0:logError:error error :: s:0:logError:error if :: false:true -> s:0:logError:error -> s:0:logError:error -> s:0:logError:error -> s:0:logError:error Rewrite Strategy: INNERMOST ---------------------------------------- (109) 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: LE_2 DOUBLE_1 LOG_1 LOOP_3 IF_4 IFMAP_3 LAST_1 DROPLAST_1 MAPITER_2 (c) The following functions are completely defined: le_2 double_1 droplast_1 log_1 last_1 loop_3 if_4 isempty_1 Due to the following rules being added: le(v0, v1) -> null_le [0] double(v0) -> null_double [0] droplast(v0) -> nil [0] log(v0) -> null_log [0] last(v0) -> null_last [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] isempty(v0) -> null_isempty [0] And the following fresh constants: null_le, null_double, null_log, null_last, null_loop, null_if, null_isempty, const, const1, const2, const3, const4, const5, const6, const7, const8 ---------------------------------------- (110) 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: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) [1] DOUBLE(s(z0)) -> c5(DOUBLE(z0)) [1] LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) [1] LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) [1] IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) [1] IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) [1] IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) [1] LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) [1] DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) [1] MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) [1] le(0, z0) -> true [0] le(s(z0), s(z1)) -> le(z0, z1) [0] le(s(z0), 0) -> false [0] double(0) -> 0 [0] double(s(z0)) -> s(s(double(z0))) [0] droplast(nil) -> nil [0] droplast(cons(z0, nil)) -> nil [0] droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) [0] log(0) -> logError [0] log(s(z0)) -> loop(s(z0), s(0), 0) [0] last(nil) -> error [0] last(cons(z0, nil)) -> z0 [0] last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) [0] loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) [0] if(true, z0, z1, z2) -> z2 [0] if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) [0] isempty(nil) -> true [0] isempty(cons(z0, z1)) -> false [0] le(v0, v1) -> null_le [0] double(v0) -> null_double [0] droplast(v0) -> nil [0] log(v0) -> null_log [0] last(v0) -> null_last [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] isempty(v0) -> null_isempty [0] The TRS has the following type information: LE :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c3 s :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if c3 :: c3 -> c3 DOUBLE :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c5 c5 :: c5 -> c5 LOG :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c7 c7 :: c8 -> c7 LOOP :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c8 0 :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if c8 :: c10 -> c3 -> c8 IF :: false:true:null_le:null_isempty -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c10 le :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> false:true:null_le:null_isempty false :: false:true:null_le:null_isempty c10 :: c8 -> c5 -> c10 double :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if IFMAP :: false:true:null_le:null_isempty -> cons:nil -> cons:nil -> c14:c15 c14 :: c12 -> c23 -> c14:c15 MAPITER :: cons:nil -> cons:nil -> c12 droplast :: cons:nil -> cons:nil cons :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> cons:nil -> cons:nil log :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if last :: cons:nil -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if DROPLAST :: cons:nil -> c23 c15 :: c12 -> c7 -> c20 -> c14:c15 LAST :: cons:nil -> c20 c20 :: c20 -> c20 c23 :: c23 -> c23 c12 :: c14:c15 -> c12 isempty :: cons:nil -> false:true:null_le:null_isempty true :: false:true:null_le:null_isempty nil :: cons:nil logError :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if loop :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if error :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if if :: false:true:null_le:null_isempty -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_le :: false:true:null_le:null_isempty null_double :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_log :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_last :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_loop :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_if :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_isempty :: false:true:null_le:null_isempty const :: c3 const1 :: c5 const2 :: c7 const3 :: c8 const4 :: c10 const5 :: c14:c15 const6 :: c12 const7 :: c23 const8 :: c20 Rewrite Strategy: INNERMOST ---------------------------------------- (111) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (112) 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: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) [1] DOUBLE(s(z0)) -> c5(DOUBLE(z0)) [1] LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) [1] LOOP(0, s(z1), z2) -> c8(IF(true, 0, s(z1), z2), LE(0, s(z1))) [1] LOOP(s(z0'), s(z1), z2) -> c8(IF(le(z0', z1), s(z0'), s(z1), z2), LE(s(z0'), s(z1))) [1] LOOP(z0, s(z1), z2) -> c8(IF(null_le, z0, s(z1), z2), LE(z0, s(z1))) [1] IF(false, z0, 0, z2) -> c10(LOOP(z0, 0, s(z2)), DOUBLE(0)) [1] IF(false, z0, s(z0''), z2) -> c10(LOOP(z0, s(s(double(z0''))), s(z2)), DOUBLE(s(z0''))) [1] IF(false, z0, z1, z2) -> c10(LOOP(z0, null_double, s(z2)), DOUBLE(z1)) [1] IFMAP(false, nil, z1) -> c14(MAPITER(nil, cons(log(error), z1)), DROPLAST(nil)) [1] IFMAP(false, nil, z1) -> c14(MAPITER(nil, cons(log(null_last), z1)), DROPLAST(nil)) [1] IFMAP(false, cons(z01, nil), z1) -> c14(MAPITER(nil, cons(log(z01), z1)), DROPLAST(cons(z01, nil))) [1] IFMAP(false, cons(z01, nil), z1) -> c14(MAPITER(nil, cons(log(null_last), z1)), DROPLAST(cons(z01, nil))) [1] IFMAP(false, cons(z02, cons(z1', z2')), z1) -> c14(MAPITER(cons(z02, droplast(cons(z1', z2'))), cons(log(last(cons(z1', z2'))), z1)), DROPLAST(cons(z02, cons(z1', z2')))) [1] IFMAP(false, cons(z02, cons(z1', z2')), z1) -> c14(MAPITER(cons(z02, droplast(cons(z1', z2'))), cons(log(null_last), z1)), DROPLAST(cons(z02, cons(z1', z2')))) [1] IFMAP(false, nil, z1) -> c14(MAPITER(nil, cons(log(error), z1)), DROPLAST(nil)) [1] IFMAP(false, cons(z03, nil), z1) -> c14(MAPITER(nil, cons(log(z03), z1)), DROPLAST(cons(z03, nil))) [1] IFMAP(false, cons(z04, cons(z1'', z2'')), z1) -> c14(MAPITER(nil, cons(log(last(cons(z1'', z2''))), z1)), DROPLAST(cons(z04, cons(z1'', z2'')))) [1] IFMAP(false, z0, z1) -> c14(MAPITER(nil, cons(log(null_last), z1)), DROPLAST(z0)) [1] IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) [1] LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) [1] DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) [1] MAPITER(nil, z1) -> c12(IFMAP(true, nil, z1)) [1] MAPITER(cons(z011, z14), z1) -> c12(IFMAP(false, cons(z011, z14), z1)) [1] MAPITER(z0, z1) -> c12(IFMAP(null_isempty, z0, z1)) [1] le(0, z0) -> true [0] le(s(z0), s(z1)) -> le(z0, z1) [0] le(s(z0), 0) -> false [0] double(0) -> 0 [0] double(s(z0)) -> s(s(double(z0))) [0] droplast(nil) -> nil [0] droplast(cons(z0, nil)) -> nil [0] droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) [0] log(0) -> logError [0] log(s(z0)) -> loop(s(z0), s(0), 0) [0] last(nil) -> error [0] last(cons(z0, nil)) -> z0 [0] last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) [0] loop(0, s(z1), z2) -> if(true, 0, s(z1), z2) [0] loop(s(z012), s(z1), z2) -> if(le(z012, z1), s(z012), s(z1), z2) [0] loop(z0, s(z1), z2) -> if(null_le, z0, s(z1), z2) [0] if(true, z0, z1, z2) -> z2 [0] if(false, z0, 0, z2) -> loop(z0, 0, s(z2)) [0] if(false, z0, s(z013), z2) -> loop(z0, s(s(double(z013))), s(z2)) [0] if(false, z0, z1, z2) -> loop(z0, null_double, s(z2)) [0] isempty(nil) -> true [0] isempty(cons(z0, z1)) -> false [0] le(v0, v1) -> null_le [0] double(v0) -> null_double [0] droplast(v0) -> nil [0] log(v0) -> null_log [0] last(v0) -> null_last [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] isempty(v0) -> null_isempty [0] The TRS has the following type information: LE :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c3 s :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if c3 :: c3 -> c3 DOUBLE :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c5 c5 :: c5 -> c5 LOG :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c7 c7 :: c8 -> c7 LOOP :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c8 0 :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if c8 :: c10 -> c3 -> c8 IF :: false:true:null_le:null_isempty -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c10 le :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> false:true:null_le:null_isempty false :: false:true:null_le:null_isempty c10 :: c8 -> c5 -> c10 double :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if IFMAP :: false:true:null_le:null_isempty -> cons:nil -> cons:nil -> c14:c15 c14 :: c12 -> c23 -> c14:c15 MAPITER :: cons:nil -> cons:nil -> c12 droplast :: cons:nil -> cons:nil cons :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> cons:nil -> cons:nil log :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if last :: cons:nil -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if DROPLAST :: cons:nil -> c23 c15 :: c12 -> c7 -> c20 -> c14:c15 LAST :: cons:nil -> c20 c20 :: c20 -> c20 c23 :: c23 -> c23 c12 :: c14:c15 -> c12 isempty :: cons:nil -> false:true:null_le:null_isempty true :: false:true:null_le:null_isempty nil :: cons:nil logError :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if loop :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if error :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if if :: false:true:null_le:null_isempty -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_le :: false:true:null_le:null_isempty null_double :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_log :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_last :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_loop :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_if :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_isempty :: false:true:null_le:null_isempty const :: c3 const1 :: c5 const2 :: c7 const3 :: c8 const4 :: c10 const5 :: c14:c15 const6 :: c12 const7 :: c23 const8 :: c20 Rewrite Strategy: INNERMOST ---------------------------------------- (113) 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 false => 1 true => 2 nil => 0 logError => 2 error => 1 null_le => 0 null_double => 0 null_log => 0 null_last => 0 null_loop => 0 null_if => 0 null_isempty => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 const4 => 0 const5 => 0 const6 => 0 const7 => 0 const8 => 0 ---------------------------------------- (114) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z0) :|: z = 1 + z0, z0 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z0, 0, 1 + z2) + DOUBLE(z1) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z0, 0, 1 + z2) + DOUBLE(0) :|: z'' = 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z0, 1 + (1 + double(z0'')), 1 + z2) + DOUBLE(1 + z0'') :|: z = 1, z'' = 1 + z0'', z0 >= 0, z0'' >= 0, z3 = z2, z' = z0, z2 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z01) + z1) + DROPLAST(1 + z01 + 0) :|: z1 >= 0, z' = 1 + z01 + 0, z01 >= 0, z = 1, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z03) + z1) + DROPLAST(1 + z03 + 0) :|: z1 >= 0, z = 1, z' = 1 + z03 + 0, z03 >= 0, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z1) + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z1 >= 0, z = 1, z2'' >= 0, z'' = z1, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z1) + DROPLAST(0) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z1) + DROPLAST(z0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z1) + DROPLAST(0) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z1) + DROPLAST(1 + z01 + 0) :|: z1 >= 0, z' = 1 + z01 + 0, z01 >= 0, z = 1, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z1) + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z1 >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z1) + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z1 >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z0), 1 + log(last(z0)) + z1) + LOG(last(z0)) + LAST(z0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 LOG(z) -{ 1 }-> 1 + LOOP(1 + z0, 1 + 0, 0) :|: z = 1 + z0, z0 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(le(z0', z1), 1 + z0', 1 + z1, z2) + LE(1 + z0', 1 + z1) :|: z'' = z2, z1 >= 0, z0' >= 0, z = 1 + z0', z' = 1 + z1, z2 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + z1, z2) + LE(0, 1 + z1) :|: z'' = z2, z1 >= 0, z = 0, z' = 1 + z1, z2 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z0, 1 + z1, z2) + LE(z0, 1 + z1) :|: z'' = z2, z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1, z2 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z1) :|: z1 >= 0, z' = z1, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z1) :|: z = 1 + z011 + z14, z011 >= 0, z1 >= 0, z' = z1, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 double(z) -{ 0 }-> 1 + (1 + double(z0)) :|: z = 1 + z0, z0 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z0 >= 0, z = 1 + z0 + 0 droplast(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z2 :|: z = 2, z1 >= 0, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> loop(z0, 0, 1 + z2) :|: z'' = 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z0, 0, 1 + z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> loop(z0, 1 + (1 + double(z013)), 1 + z2) :|: z = 1, z'' = 1 + z013, z013 >= 0, z0 >= 0, z3 = z2, z' = z0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z3 = v3, v2 >= 0, v3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 last(z) -{ 0 }-> z0 :|: z0 >= 0, z = 1 + z0 + 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 le(z, z') -{ 0 }-> le(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 le(z, z') -{ 0 }-> 2 :|: z0 >= 0, z = 0, z' = z0 le(z, z') -{ 0 }-> 1 :|: z = 1 + z0, z0 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 log(z) -{ 0 }-> loop(1 + z0, 1 + 0, 0) :|: z = 1 + z0, z0 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 loop(z, z', z'') -{ 0 }-> if(le(z012, z1), 1 + z012, 1 + z1, z2) :|: z'' = z2, z1 >= 0, z012 >= 0, z = 1 + z012, z' = 1 + z1, z2 >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + z1, z2) :|: z'' = z2, z1 >= 0, z = 0, z' = 1 + z1, z2 >= 0 loop(z, z', z'') -{ 0 }-> if(0, z0, 1 + z1, z2) :|: z'' = z2, z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1, z2 >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 ---------------------------------------- (115) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (116) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') + LE(1 + (z - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + LE(0, 1 + (z' - 1)) :|: z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z, 1 + (z' - 1), z'') + LE(z, 1 + (z' - 1)) :|: z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> le(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 ---------------------------------------- (117) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { le } { LE } { droplast } { DROPLAST } { double } { LAST } { isempty } { DOUBLE } { last } { if, loop } { LOOP, IF } { log } { LOG } { MAPITER, IFMAP } ---------------------------------------- (118) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') + LE(1 + (z - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + LE(0, 1 + (z' - 1)) :|: z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z, 1 + (z' - 1), z'') + LE(z, 1 + (z' - 1)) :|: z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> le(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {le}, {LE}, {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} ---------------------------------------- (119) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (120) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') + LE(1 + (z - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + LE(0, 1 + (z' - 1)) :|: z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z, 1 + (z' - 1), z'') + LE(z, 1 + (z' - 1)) :|: z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> le(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {le}, {LE}, {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} ---------------------------------------- (121) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: le after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (122) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') + LE(1 + (z - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + LE(0, 1 + (z' - 1)) :|: z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z, 1 + (z' - 1), z'') + LE(z, 1 + (z' - 1)) :|: z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> le(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {le}, {LE}, {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: ?, size: O(1) [2] ---------------------------------------- (123) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: le after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (124) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') + LE(1 + (z - 1), 1 + (z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + LE(0, 1 + (z' - 1)) :|: z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z, 1 + (z' - 1), z'') + LE(z, 1 + (z' - 1)) :|: z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> le(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(le(z - 1, z' - 1), 1 + (z - 1), 1 + (z' - 1), z'') :|: z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LE}, {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (125) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (126) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + LE(1 + (z - 1), 1 + (z' - 1)) :|: s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + LE(0, 1 + (z' - 1)) :|: z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z, 1 + (z' - 1), z'') + LE(z, 1 + (z' - 1)) :|: z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LE}, {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (127) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: LE after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (128) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + LE(1 + (z - 1), 1 + (z' - 1)) :|: s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + LE(0, 1 + (z' - 1)) :|: z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z, 1 + (z' - 1), z'') + LE(z, 1 + (z' - 1)) :|: z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LE}, {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: ?, size: O(1) [0] ---------------------------------------- (129) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: LE after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (130) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 1 }-> 1 + LE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + LE(1 + (z - 1), 1 + (z' - 1)) :|: s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + LE(0, 1 + (z' - 1)) :|: z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(0, z, 1 + (z' - 1), z'') + LE(z, 1 + (z' - 1)) :|: z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] ---------------------------------------- (131) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (132) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] ---------------------------------------- (133) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: droplast after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (134) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {droplast}, {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: ?, size: O(n^1) [z] ---------------------------------------- (135) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: droplast after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (136) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + droplast(1 + z1' + z2'), 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z'), 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (137) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (138) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (139) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: DROPLAST after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (140) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {DROPLAST}, {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: ?, size: O(1) [0] ---------------------------------------- (141) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: DROPLAST after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (142) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + DROPLAST(1 + z04 + (1 + z1'' + z2'')) :|: z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(z') :|: z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(0) :|: z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + DROPLAST(1 + (z' - 1) + 0) :|: z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + DROPLAST(1 + z02 + (1 + z1' + z2')) :|: s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (143) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (144) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (145) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: double after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z ---------------------------------------- (146) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {double}, {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: ?, size: O(n^1) [2*z] ---------------------------------------- (147) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: double after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (148) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + double(z'' - 1)), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + double(z - 1)) :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + double(z'' - 1)), 1 + z3) :|: z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] ---------------------------------------- (149) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (150) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] ---------------------------------------- (151) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: LAST after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (152) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LAST}, {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: ?, size: O(1) [0] ---------------------------------------- (153) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: LAST after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (154) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + LAST(z') :|: s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (155) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (156) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (157) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isempty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (158) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {isempty}, {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: ?, size: O(1) [2] ---------------------------------------- (159) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isempty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (160) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (161) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (162) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (163) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: DOUBLE after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (164) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {DOUBLE}, {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: ?, size: O(1) [0] ---------------------------------------- (165) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: DOUBLE after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (166) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z - 1) :|: z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(z'') :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + DOUBLE(0) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + DOUBLE(1 + (z'' - 1)) :|: s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (167) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (168) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (169) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: last after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (170) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {last}, {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] last: runtime: ?, size: O(n^1) [1 + z] ---------------------------------------- (171) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: last after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (172) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(last(1 + z1'' + z2'')) + z'') + s15 :|: s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(last(1 + z1' + z2')) + z'') + s13 :|: s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(last(z')) + z'') + LOG(last(z')) + s21 :|: s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] last: runtime: O(1) [0], size: O(n^1) [1 + z] ---------------------------------------- (173) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (174) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(s28) + z'') + s15 :|: s28 >= 0, s28 <= 1 + z1'' + z2'' + 1, s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(s27) + z'') + s13 :|: s27 >= 0, s27 <= 1 + z1' + z2' + 1, s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(s29) + z'') + LOG(s30) + s21 :|: s29 >= 0, s29 <= z' + 1, s30 >= 0, s30 <= z' + 1, s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> s31 :|: s31 >= 0, s31 <= 1 + z1 + z2 + 1, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] last: runtime: O(1) [0], size: O(n^1) [1 + z] ---------------------------------------- (175) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: loop after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (176) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(s28) + z'') + s15 :|: s28 >= 0, s28 <= 1 + z1'' + z2'' + 1, s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(s27) + z'') + s13 :|: s27 >= 0, s27 <= 1 + z1' + z2' + 1, s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(s29) + z'') + LOG(s30) + s21 :|: s29 >= 0, s29 <= z' + 1, s30 >= 0, s30 <= z' + 1, s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> s31 :|: s31 >= 0, s31 <= 1 + z1 + z2 + 1, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {if,loop}, {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] last: runtime: O(1) [0], size: O(n^1) [1 + z] if: runtime: ?, size: INF loop: runtime: ?, size: INF ---------------------------------------- (177) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: loop after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (178) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(s28) + z'') + s15 :|: s28 >= 0, s28 <= 1 + z1'' + z2'' + 1, s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(s27) + z'') + s13 :|: s27 >= 0, s27 <= 1 + z1' + z2' + 1, s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(s29) + z'') + LOG(s30) + s21 :|: s29 >= 0, s29 <= z' + 1, s30 >= 0, s30 <= z' + 1, s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 0, 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> loop(z', 1 + (1 + s20), 1 + z3) :|: s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> s31 :|: s31 >= 0, s31 <= 1 + z1 + z2 + 1, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> loop(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> if(s'', 1 + (z - 1), 1 + (z' - 1), z'') :|: s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(2, 0, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> if(0, z, 1 + (z' - 1), z'') :|: z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] last: runtime: O(1) [0], size: O(n^1) [1 + z] if: runtime: O(1) [0], size: INF loop: runtime: O(1) [0], size: INF ---------------------------------------- (179) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (180) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(s28) + z'') + s15 :|: s28 >= 0, s28 <= 1 + z1'' + z2'' + 1, s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(s27) + z'') + s13 :|: s27 >= 0, s27 <= 1 + z1' + z2' + 1, s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(s29) + z'') + LOG(s30) + s21 :|: s29 >= 0, s29 <= z' + 1, s30 >= 0, s30 <= z' + 1, s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> s36 :|: s36 >= 0, s36 <= inf2, z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s37 :|: s37 >= 0, s37 <= inf3, s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s38 :|: s38 >= 0, s38 <= inf4, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> s31 :|: s31 >= 0, s31 <= 1 + z1 + z2 + 1, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> s32 :|: s32 >= 0, s32 <= inf, z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> s33 :|: s33 >= 0, s33 <= inf', z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> s34 :|: s34 >= 0, s34 <= inf'', s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> s35 :|: s35 >= 0, s35 <= inf1, z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] last: runtime: O(1) [0], size: O(n^1) [1 + z] if: runtime: O(1) [0], size: INF loop: runtime: O(1) [0], size: INF ---------------------------------------- (181) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: LOOP after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: IF after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (182) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(s28) + z'') + s15 :|: s28 >= 0, s28 <= 1 + z1'' + z2'' + 1, s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(s27) + z'') + s13 :|: s27 >= 0, s27 <= 1 + z1' + z2' + 1, s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(s29) + z'') + LOG(s30) + s21 :|: s29 >= 0, s29 <= z' + 1, s30 >= 0, s30 <= z' + 1, s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> s36 :|: s36 >= 0, s36 <= inf2, z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s37 :|: s37 >= 0, s37 <= inf3, s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s38 :|: s38 >= 0, s38 <= inf4, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> s31 :|: s31 >= 0, s31 <= 1 + z1 + z2 + 1, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> s32 :|: s32 >= 0, s32 <= inf, z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> s33 :|: s33 >= 0, s33 <= inf', z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> s34 :|: s34 >= 0, s34 <= inf'', s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> s35 :|: s35 >= 0, s35 <= inf1, z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] last: runtime: O(1) [0], size: O(n^1) [1 + z] if: runtime: O(1) [0], size: INF loop: runtime: O(1) [0], size: INF LOOP: runtime: ?, size: O(1) [0] IF: runtime: ?, size: O(1) [1] ---------------------------------------- (183) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: LOOP after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (184) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ z }-> 1 + s23 :|: s23 >= 0, s23 <= 0, z - 1 >= 0 DROPLAST(z) -{ 2 + z1 + z2 }-> 1 + s17 :|: s17 >= 0, s17 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z', 0, 1 + z3) + s24 :|: s24 >= 0, s24 <= 0, z'' = 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 0, 1 + z3) + s26 :|: s26 >= 0, s26 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 1 + z'' }-> 1 + LOOP(z', 1 + (1 + s18), 1 + z3) + s25 :|: s25 >= 0, s25 <= 0, s18 >= 0, s18 <= 2 * (z'' - 1), z = 1, z' >= 0, z'' - 1 >= 0, z3 >= 0 IFMAP(z, z', z'') -{ 3 + z04 + z1'' + z2'' }-> 1 + MAPITER(0, 1 + log(s28) + z'') + s15 :|: s28 >= 0, s28 <= 1 + z1'' + z2'' + 1, s15 >= 0, s15 <= 0, z04 >= 0, z' = 1 + z04 + (1 + z1'' + z2''), z'' >= 0, z = 1, z2'' >= 0, z1'' >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(1) + z'') + s9 :|: s9 >= 0, s9 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(0, 1 + log(0) + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' = 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s12 :|: s12 >= 0, s12 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(0) + z'') + s16 :|: s16 >= 0, s16 <= 0, z'' >= 0, z = 1, z' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(0, 1 + log(z' - 1) + z'') + s11 :|: s11 >= 0, s11 <= 0, z'' >= 0, z' - 1 >= 0, z = 1 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s5, 1 + log(s27) + z'') + s13 :|: s27 >= 0, s27 <= 1 + z1' + z2' + 1, s13 >= 0, s13 <= 0, s5 >= 0, s5 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 3 + z02 + z1' + z2' }-> 1 + MAPITER(1 + z02 + s6, 1 + log(0) + z'') + s14 :|: s14 >= 0, s14 <= 0, s6 >= 0, s6 <= 1 + z1' + z2', z' = 1 + z02 + (1 + z1' + z2'), z'' >= 0, z = 1, z02 >= 0, z1' >= 0, z2' >= 0 IFMAP(z, z', z'') -{ 1 + z' }-> 1 + MAPITER(s7, 1 + log(s29) + z'') + LOG(s30) + s21 :|: s29 >= 0, s29 <= z' + 1, s30 >= 0, s30 <= z' + 1, s21 >= 0, s21 <= 0, s7 >= 0, s7 <= z', z'' >= 0, z = 1, z' >= 0 LAST(z) -{ 2 + z1 + z2 }-> 1 + s22 :|: s22 >= 0, s22 <= 0, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ z' }-> 1 + s1 :|: s1 >= 0, s1 <= 0, z' - 1 >= 0, z - 1 >= 0 LOG(z) -{ 1 }-> 1 + LOOP(1 + (z - 1), 1 + 0, 0) :|: z - 1 >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(s, 1 + (z - 1), 1 + (z' - 1), z'') + s3 :|: s3 >= 0, s3 <= 0, s >= 0, s <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(2, 0, 1 + (z' - 1), z'') + s2 :|: s2 >= 0, s2 <= 0, z' - 1 >= 0, z = 0, z'' >= 0 LOOP(z, z', z'') -{ 1 + z' }-> 1 + IF(0, z, 1 + (z' - 1), z'') + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0, z'' >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(2, 0, z') :|: z' >= 0, z = 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(1, 1 + z011 + z14, z') :|: z = 1 + z011 + z14, z011 >= 0, z' >= 0, z14 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(0, z, z') :|: z' >= 0, z >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: z >= 0 double(z) -{ 0 }-> 1 + (1 + s19) :|: s19 >= 0, s19 <= 2 * (z - 1), z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z - 1 >= 0 droplast(z) -{ 0 }-> 0 :|: z >= 0 droplast(z) -{ 0 }-> 1 + z0 + s8 :|: s8 >= 0, s8 <= 1 + z1 + z2, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> s36 :|: s36 >= 0, s36 <= inf2, z'' = 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s37 :|: s37 >= 0, s37 <= inf3, s20 >= 0, s20 <= 2 * (z'' - 1), z = 1, z'' - 1 >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s38 :|: s38 >= 0, s38 <= inf4, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z3 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> s31 :|: s31 >= 0, s31 <= 1 + z1 + z2 + 1, z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: z >= 0 last(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 le(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z' - 1 >= 0, z - 1 >= 0 le(z, z') -{ 0 }-> 2 :|: z' >= 0, z = 0 le(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 log(z) -{ 0 }-> s32 :|: s32 >= 0, s32 <= inf, z - 1 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: z >= 0 loop(z, z', z'') -{ 0 }-> s33 :|: s33 >= 0, s33 <= inf', z' - 1 >= 0, z = 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> s34 :|: s34 >= 0, s34 <= inf'', s'' >= 0, s'' <= 2, z' - 1 >= 0, z - 1 >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> s35 :|: s35 >= 0, s35 <= inf1, z' - 1 >= 0, z >= 0, z'' >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 Function symbols to be analyzed: {LOOP,IF}, {log}, {LOG}, {MAPITER,IFMAP} Previous analysis results are: le: runtime: O(1) [0], size: O(1) [2] LE: runtime: O(n^1) [z'], size: O(1) [0] droplast: runtime: O(1) [0], size: O(n^1) [z] DROPLAST: runtime: O(n^1) [z], size: O(1) [0] double: runtime: O(1) [0], size: O(n^1) [2*z] LAST: runtime: O(n^1) [z], size: O(1) [0] isempty: runtime: O(1) [0], size: O(1) [2] DOUBLE: runtime: O(n^1) [z], size: O(1) [0] last: runtime: O(1) [0], size: O(n^1) [1 + z] if: runtime: O(1) [0], size: INF loop: runtime: O(1) [0], size: INF LOOP: runtime: INF, size: O(1) [0] IF: runtime: ?, size: O(1) [1] ---------------------------------------- (185) 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: le(v0, v1) -> null_le [0] double(v0) -> null_double [0] droplast(v0) -> null_droplast [0] log(v0) -> null_log [0] last(v0) -> null_last [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] isempty(v0) -> null_isempty [0] LE(v0, v1) -> null_LE [0] DOUBLE(v0) -> null_DOUBLE [0] LOG(v0) -> null_LOG [0] LOOP(v0, v1, v2) -> null_LOOP [0] IF(v0, v1, v2, v3) -> null_IF [0] IFMAP(v0, v1, v2) -> null_IFMAP [0] LAST(v0) -> null_LAST [0] DROPLAST(v0) -> null_DROPLAST [0] And the following fresh constants: null_le, null_double, null_droplast, null_log, null_last, null_loop, null_if, null_isempty, null_LE, null_DOUBLE, null_LOG, null_LOOP, null_IF, null_IFMAP, null_LAST, null_DROPLAST, const ---------------------------------------- (186) 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: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) [1] DOUBLE(s(z0)) -> c5(DOUBLE(z0)) [1] LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) [1] LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) [1] IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) [1] IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) [1] IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) [1] LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) [1] DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) [1] MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) [1] le(0, z0) -> true [0] le(s(z0), s(z1)) -> le(z0, z1) [0] le(s(z0), 0) -> false [0] double(0) -> 0 [0] double(s(z0)) -> s(s(double(z0))) [0] droplast(nil) -> nil [0] droplast(cons(z0, nil)) -> nil [0] droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) [0] log(0) -> logError [0] log(s(z0)) -> loop(s(z0), s(0), 0) [0] last(nil) -> error [0] last(cons(z0, nil)) -> z0 [0] last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) [0] loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) [0] if(true, z0, z1, z2) -> z2 [0] if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) [0] isempty(nil) -> true [0] isempty(cons(z0, z1)) -> false [0] le(v0, v1) -> null_le [0] double(v0) -> null_double [0] droplast(v0) -> null_droplast [0] log(v0) -> null_log [0] last(v0) -> null_last [0] loop(v0, v1, v2) -> null_loop [0] if(v0, v1, v2, v3) -> null_if [0] isempty(v0) -> null_isempty [0] LE(v0, v1) -> null_LE [0] DOUBLE(v0) -> null_DOUBLE [0] LOG(v0) -> null_LOG [0] LOOP(v0, v1, v2) -> null_LOOP [0] IF(v0, v1, v2, v3) -> null_IF [0] IFMAP(v0, v1, v2) -> null_IFMAP [0] LAST(v0) -> null_LAST [0] DROPLAST(v0) -> null_DROPLAST [0] The TRS has the following type information: LE :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c3:null_LE s :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if c3 :: c3:null_LE -> c3:null_LE DOUBLE :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c5:null_DOUBLE c5 :: c5:null_DOUBLE -> c5:null_DOUBLE LOG :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c7:null_LOG c7 :: c8:null_LOOP -> c7:null_LOG LOOP :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c8:null_LOOP 0 :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if c8 :: c10:null_IF -> c3:null_LE -> c8:null_LOOP IF :: false:true:null_le:null_isempty -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> c10:null_IF le :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> false:true:null_le:null_isempty false :: false:true:null_le:null_isempty c10 :: c8:null_LOOP -> c5:null_DOUBLE -> c10:null_IF double :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if IFMAP :: false:true:null_le:null_isempty -> cons:nil:null_droplast -> cons:nil:null_droplast -> c14:c15:null_IFMAP c14 :: c12 -> c23:null_DROPLAST -> c14:c15:null_IFMAP MAPITER :: cons:nil:null_droplast -> cons:nil:null_droplast -> c12 droplast :: cons:nil:null_droplast -> cons:nil:null_droplast cons :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> cons:nil:null_droplast -> cons:nil:null_droplast log :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if last :: cons:nil:null_droplast -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if DROPLAST :: cons:nil:null_droplast -> c23:null_DROPLAST c15 :: c12 -> c7:null_LOG -> c20:null_LAST -> c14:c15:null_IFMAP LAST :: cons:nil:null_droplast -> c20:null_LAST c20 :: c20:null_LAST -> c20:null_LAST c23 :: c23:null_DROPLAST -> c23:null_DROPLAST c12 :: c14:c15:null_IFMAP -> c12 isempty :: cons:nil:null_droplast -> false:true:null_le:null_isempty true :: false:true:null_le:null_isempty nil :: cons:nil:null_droplast logError :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if loop :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if error :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if if :: false:true:null_le:null_isempty -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if -> s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_le :: false:true:null_le:null_isempty null_double :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_droplast :: cons:nil:null_droplast null_log :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_last :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_loop :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_if :: s:0:logError:error:null_double:null_log:null_last:null_loop:null_if null_isempty :: false:true:null_le:null_isempty null_LE :: c3:null_LE null_DOUBLE :: c5:null_DOUBLE null_LOG :: c7:null_LOG null_LOOP :: c8:null_LOOP null_IF :: c10:null_IF null_IFMAP :: c14:c15:null_IFMAP null_LAST :: c20:null_LAST null_DROPLAST :: c23:null_DROPLAST const :: c12 Rewrite Strategy: INNERMOST ---------------------------------------- (187) 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 false => 1 true => 2 nil => 0 logError => 2 error => 1 null_le => 0 null_double => 0 null_droplast => 0 null_log => 0 null_last => 0 null_loop => 0 null_if => 0 null_isempty => 0 null_LE => 0 null_DOUBLE => 0 null_LOG => 0 null_LOOP => 0 null_IF => 0 null_IFMAP => 0 null_LAST => 0 null_DROPLAST => 0 const => 0 ---------------------------------------- (188) Obligation: Complexity RNTS consisting of the following rules: DOUBLE(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 DOUBLE(z) -{ 1 }-> 1 + DOUBLE(z0) :|: z = 1 + z0, z0 >= 0 DROPLAST(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 DROPLAST(z) -{ 1 }-> 1 + DROPLAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z3 = v3, v2 >= 0, v3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + LOOP(z0, double(z1), 1 + z2) + DOUBLE(z1) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IFMAP(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z0), 1 + log(last(z0)) + z1) + DROPLAST(z0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 IFMAP(z, z', z'') -{ 1 }-> 1 + MAPITER(droplast(z0), 1 + log(last(z0)) + z1) + LOG(last(z0)) + LAST(z0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 LAST(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 LAST(z) -{ 1 }-> 1 + LAST(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 LE(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 LE(z, z') -{ 1 }-> 1 + LE(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 LOG(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 LOG(z) -{ 1 }-> 1 + LOOP(1 + z0, 1 + 0, 0) :|: z = 1 + z0, z0 >= 0 LOOP(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 LOOP(z, z', z'') -{ 1 }-> 1 + IF(le(z0, 1 + z1), z0, 1 + z1, z2) + LE(z0, 1 + z1) :|: z'' = z2, z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1, z2 >= 0 MAPITER(z, z') -{ 1 }-> 1 + IFMAP(isempty(z0), z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 double(z) -{ 0 }-> 0 :|: z = 0 double(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 double(z) -{ 0 }-> 1 + (1 + double(z0)) :|: z = 1 + z0, z0 >= 0 droplast(z) -{ 0 }-> 0 :|: z = 0 droplast(z) -{ 0 }-> 0 :|: z0 >= 0, z = 1 + z0 + 0 droplast(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 droplast(z) -{ 0 }-> 1 + z0 + droplast(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 if(z, z', z'', z3) -{ 0 }-> z2 :|: z = 2, z1 >= 0, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> loop(z0, double(z1), 1 + z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z3 = v3, v2 >= 0, v3 >= 0 isempty(z) -{ 0 }-> 2 :|: z = 0 isempty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isempty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 last(z) -{ 0 }-> z0 :|: z0 >= 0, z = 1 + z0 + 0 last(z) -{ 0 }-> last(1 + z1 + z2) :|: z1 >= 0, z = 1 + z0 + (1 + z1 + z2), z0 >= 0, z2 >= 0 last(z) -{ 0 }-> 1 :|: z = 0 last(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 le(z, z') -{ 0 }-> le(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 le(z, z') -{ 0 }-> 2 :|: z0 >= 0, z = 0, z' = z0 le(z, z') -{ 0 }-> 1 :|: z = 1 + z0, z0 >= 0, z' = 0 le(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 log(z) -{ 0 }-> loop(1 + z0, 1 + 0, 0) :|: z = 1 + z0, z0 >= 0 log(z) -{ 0 }-> 2 :|: z = 0 log(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 loop(z, z', z'') -{ 0 }-> if(le(z0, 1 + z1), z0, 1 + z1, z2) :|: z'' = z2, z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1, z2 >= 0 loop(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (189) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LOOP(z0, s(z1), z2) -> c8(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) by LOOP(0, s(x1), x2) -> c8(IF(true, 0, s(x1), x2), LE(0, s(x1))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) ---------------------------------------- (190) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(0, s(x1), x2) -> c8(IF(true, 0, s(x1), x2), LE(0, s(x1))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(0, s(x1), x2) -> c8(IF(true, 0, s(x1), x2), LE(0, s(x1))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IF_4, IFMAP_3, LAST_1, DROPLAST_1, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c10_2, c14_2, c15_3, c20_1, c23_1, c12_1, c8_2 ---------------------------------------- (191) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: LOOP(0, s(x1), x2) -> c8(IF(true, 0, s(x1), x2), LE(0, s(x1))) ---------------------------------------- (192) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IF_4, IFMAP_3, LAST_1, DROPLAST_1, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c10_2, c14_2, c15_3, c20_1, c23_1, c12_1, c8_2 ---------------------------------------- (193) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF(false, z0, z1, z2) -> c10(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) by IF(false, x0, 0, x2) -> c10(LOOP(x0, 0, s(x2)), DOUBLE(0)) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) ---------------------------------------- (194) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, 0, x2) -> c10(LOOP(x0, 0, s(x2)), DOUBLE(0)) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, 0, x2) -> c10(LOOP(x0, 0, s(x2)), DOUBLE(0)) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IFMAP_3, LAST_1, DROPLAST_1, MAPITER_2, LOOP_3, IF_4 Compound Symbols: c3_1, c5_1, c7_1, c14_2, c15_3, c20_1, c23_1, c12_1, c8_2, c10_2 ---------------------------------------- (195) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IF(false, x0, 0, x2) -> c10(LOOP(x0, 0, s(x2)), DOUBLE(0)) ---------------------------------------- (196) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IFMAP_3, LAST_1, DROPLAST_1, MAPITER_2, LOOP_3, IF_4 Compound Symbols: c3_1, c5_1, c7_1, c14_2, c15_3, c20_1, c23_1, c12_1, c8_2, c10_2 ---------------------------------------- (197) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, z0, z1) -> c15(MAPITER(droplast(z0), cons(log(last(z0)), z1)), LOG(last(z0)), LAST(z0)) by IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1)), LOG(error), LAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0), LAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) ---------------------------------------- (198) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1)), LOG(error), LAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0), LAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1)), LOG(error), LAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0), LAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IFMAP_3, LAST_1, DROPLAST_1, MAPITER_2, LOOP_3, IF_4 Compound Symbols: c3_1, c5_1, c7_1, c14_2, c20_1, c23_1, c12_1, c8_2, c10_2, c15_3, c15_1 ---------------------------------------- (199) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (200) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IFMAP_3, LAST_1, DROPLAST_1, MAPITER_2, LOOP_3, IF_4 Compound Symbols: c3_1, c5_1, c7_1, c14_2, c20_1, c23_1, c12_1, c8_2, c10_2, c15_3, c15_1, c15_2 ---------------------------------------- (201) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MAPITER(z0, z1) -> c12(IFMAP(isempty(z0), z0, z1)) by MAPITER(nil, x1) -> c12(IFMAP(true, nil, x1)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) ---------------------------------------- (202) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(nil, x1) -> c12(IFMAP(true, nil, x1)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(nil, x1) -> c12(IFMAP(true, nil, x1)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IFMAP_3, LAST_1, DROPLAST_1, LOOP_3, IF_4, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c14_2, c20_1, c23_1, c8_2, c10_2, c15_3, c15_1, c15_2, c12_1 ---------------------------------------- (203) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: MAPITER(nil, x1) -> c12(IFMAP(true, nil, x1)) ---------------------------------------- (204) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) K tuples:none Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IFMAP_3, LAST_1, DROPLAST_1, LOOP_3, IF_4, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c14_2, c20_1, c23_1, c8_2, c10_2, c15_3, c15_1, c15_2, c12_1 ---------------------------------------- (205) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) ---------------------------------------- (206) Obligation: Complexity Dependency Tuples Problem Rules: le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) isempty(nil) -> true isempty(cons(z0, z1)) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) Defined Rule Symbols: le_2, double_1, droplast_1, log_1, last_1, loop_3, if_4, isempty_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IFMAP_3, LAST_1, DROPLAST_1, LOOP_3, IF_4, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c14_2, c20_1, c23_1, c8_2, c10_2, c15_3, c15_1, c15_2, c12_1 ---------------------------------------- (207) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: isempty(nil) -> true isempty(cons(z0, z1)) -> false ---------------------------------------- (208) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, IFMAP_3, LAST_1, DROPLAST_1, LOOP_3, IF_4, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c14_2, c20_1, c23_1, c8_2, c10_2, c15_3, c15_1, c15_2, c12_1 ---------------------------------------- (209) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, z0, z1) -> c14(MAPITER(droplast(z0), cons(log(last(z0)), z1)), DROPLAST(z0)) by IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1)), DROPLAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(nil, cons(log(last(nil)), x1)), DROPLAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(nil, cons(log(last(cons(z0, nil))), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) ---------------------------------------- (210) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1)), DROPLAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(nil, cons(log(last(nil)), x1)), DROPLAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(nil, cons(log(last(cons(z0, nil))), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1)), DROPLAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(nil, cons(log(last(nil)), x1)), DROPLAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(nil, cons(log(last(cons(z0, nil))), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, LOOP_3, IF_4, IFMAP_3, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c8_2, c10_2, c15_3, c15_1, c15_2, c12_1, c14_2 ---------------------------------------- (211) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(nil, cons(log(last(cons(z0, nil))), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, nil, x1) -> c14(MAPITER(nil, cons(log(last(nil)), x1)), DROPLAST(nil)) ---------------------------------------- (212) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1)), DROPLAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1)), DROPLAST(nil)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), DROPLAST(cons(z0, nil))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, LOOP_3, IF_4, IFMAP_3, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c8_2, c10_2, c15_3, c15_1, c15_2, c12_1, c14_2 ---------------------------------------- (213) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (214) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, LOOP_3, IF_4, IFMAP_3, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c8_2, c10_2, c15_3, c15_1, c15_2, c12_1, c14_2, c14_1 ---------------------------------------- (215) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) ---------------------------------------- (216) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, LOOP_3, IF_4, IFMAP_3, MAPITER_2 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c8_2, c10_2, c15_3, c15_1, c15_2, c12_1, c14_2, c14_1 ---------------------------------------- (217) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LOOP(s(z0), s(z1), x2) -> c8(IF(le(z0, z1), s(z0), s(z1), x2), LE(s(z0), s(z1))) by LOOP(s(0), s(z0), x2) -> c8(IF(true, s(0), s(z0), x2), LE(s(0), s(z0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(s(z0)), s(0), x2) -> c8(IF(false, s(s(z0)), s(0), x2), LE(s(s(z0)), s(0))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) ---------------------------------------- (218) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(0), s(z0), x2) -> c8(IF(true, s(0), s(z0), x2), LE(s(0), s(z0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(s(z0)), s(0), x2) -> c8(IF(false, s(s(z0)), s(0), x2), LE(s(s(z0)), s(0))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(0), s(z0), x2) -> c8(IF(true, s(0), s(z0), x2), LE(s(0), s(z0))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(s(z0)), s(0), x2) -> c8(IF(false, s(s(z0)), s(0), x2), LE(s(s(z0)), s(0))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_3, c15_1, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1 ---------------------------------------- (219) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (220) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(s(z0)), s(0), x2) -> c8(IF(false, s(s(z0)), s(0), x2), LE(s(s(z0)), s(0))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(s(z0)), s(0), x2) -> c8(IF(false, s(s(z0)), s(0), x2), LE(s(s(z0)), s(0))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_3, c15_1, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1 ---------------------------------------- (221) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (222) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_3, c15_1, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1 ---------------------------------------- (223) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) by IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) ---------------------------------------- (224) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_1, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3 ---------------------------------------- (225) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, x0, x1) -> c15(MAPITER(droplast(x0), cons(log(last(x0)), x1))) by IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(nil, cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(last(cons(z0, nil))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) ---------------------------------------- (226) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(nil, cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(last(cons(z0, nil))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(nil, cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(last(cons(z0, nil))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_1, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3 ---------------------------------------- (227) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(last(cons(z0, nil))), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(nil, cons(log(last(nil)), x1))) ---------------------------------------- (228) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_1, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3 ---------------------------------------- (229) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) ---------------------------------------- (230) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_1, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3 ---------------------------------------- (231) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) by IFMAP(false, nil, x0) -> c15(MAPITER(droplast(nil), cons(log(error), x0))) IFMAP(false, nil, x0) -> c15(MAPITER(nil, cons(log(last(nil)), x0))) ---------------------------------------- (232) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, nil, x0) -> c15(MAPITER(nil, cons(log(last(nil)), x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(last(nil)), x1))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3, c15_1 ---------------------------------------- (233) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, nil, x0) -> c15(MAPITER(nil, cons(log(last(nil)), x0))) ---------------------------------------- (234) Obligation: Complexity Dependency Tuples Problem Rules: droplast(nil) -> nil droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(nil) -> error last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false double(0) -> 0 double(s(z0)) -> s(s(double(z0))) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: droplast_1, log_1, last_1, loop_3, if_4, le_2, double_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3, c15_1 ---------------------------------------- (235) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: last(nil) -> error ---------------------------------------- (236) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, IFMAP_3, MAPITER_2, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c15_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3, c15_1 ---------------------------------------- (237) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(last(cons(z0, nil))), x1)), LOG(z0)) by IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(last(cons(z0, nil))), x1)), LOG(z0)) ---------------------------------------- (238) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(last(cons(z0, nil))), x1)), LOG(z0)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(last(cons(z0, nil))), x1)), LOG(z0)) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, IFMAP_3, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2 ---------------------------------------- (239) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (240) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, IFMAP_3, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2 ---------------------------------------- (241) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = x_2 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(error) = [1] POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(last(x_1)) = [1] POL(le(x_1, x_2)) = [1] + x_1 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(nil) = [1] POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (242) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, IFMAP_3, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2 ---------------------------------------- (243) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) by IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) ---------------------------------------- (244) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, IFMAP_3, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c14_2, c14_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2 ---------------------------------------- (245) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1)), DROPLAST(cons(z0, cons(z1, z2)))) by IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) ---------------------------------------- (246) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, IFMAP_3, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c14_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2, c14_2 ---------------------------------------- (247) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_2 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(error) = [1] POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(last(x_1)) = [1] POL(le(x_1, x_2)) = [1] + x_1 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (248) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, IFMAP_3, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c14_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2, c14_2 ---------------------------------------- (249) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) by IFMAP(false, nil, x0) -> c14(MAPITER(nil, cons(log(error), x0))) ---------------------------------------- (250) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, nil, x0) -> c14(MAPITER(nil, cons(log(error), x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, nil, x1) -> c14(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, IFMAP_3, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c14_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2, c14_2 ---------------------------------------- (251) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, nil, x0) -> c14(MAPITER(nil, cons(log(error), x0))) ---------------------------------------- (252) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, IFMAP_3, LOOP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c14_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2, c14_2 ---------------------------------------- (253) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) by IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(nil, cons(log(z0), x1))) ---------------------------------------- (254) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(nil, cons(log(z0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(nil, cons(log(z0), x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2, c14_2, c14_1 ---------------------------------------- (255) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, cons(z0, nil), x1) -> c14(MAPITER(nil, cons(log(z0), x1))) ---------------------------------------- (256) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_2, c8_1, c_1, c15_3, c15_1, c15_2, c14_2, c14_1 ---------------------------------------- (257) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LOOP(s(s(z0)), s(s(z1)), x2) -> c8(IF(le(z0, z1), s(s(z0)), s(s(z1)), x2), LE(s(s(z0)), s(s(z1)))) by LOOP(s(s(0)), s(s(z0)), x2) -> c8(IF(true, s(s(0)), s(s(z0)), x2), LE(s(s(0)), s(s(z0)))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) ---------------------------------------- (258) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(IF(true, s(s(0)), s(s(z0)), x2), LE(s(s(0)), s(s(z0)))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(IF(true, s(s(0)), s(s(z0)), x2), LE(s(s(0)), s(s(z0)))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_3, c15_1, c15_2, c14_2, c14_1, c8_2 ---------------------------------------- (259) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (260) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_3, c15_1, c15_2, c14_2, c14_1, c8_2 ---------------------------------------- (261) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) by IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) ---------------------------------------- (262) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_3, c15_1, c15_2, c14_2, c14_1, c8_2 ---------------------------------------- (263) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) by IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) ---------------------------------------- (264) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c15_2, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (265) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = [1] + x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_2 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(error) = [1] POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(last(x_1)) = [1] POL(le(x_1, x_2)) = [1] + x_1 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_1 + x_3 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (266) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c15_2, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (267) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) by IFMAP(false, nil, x0) -> c15(MAPITER(nil, cons(log(error), x0))) ---------------------------------------- (268) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, nil, x0) -> c15(MAPITER(nil, cons(log(error), x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, nil, x1) -> c15(MAPITER(droplast(nil), cons(log(error), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c15_2, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (269) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, nil, x0) -> c15(MAPITER(nil, cons(log(error), x0))) ---------------------------------------- (270) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) droplast(nil) -> nil log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, last_1, loop_3, if_4, le_2 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c15_2, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (271) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: droplast(nil) -> nil ---------------------------------------- (272) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c15_2, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (273) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1))) by IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(z0), x1))) ---------------------------------------- (274) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(z0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(z0), x1))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c15_2, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (275) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(z0), x1))) ---------------------------------------- (276) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c15_2, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (277) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(droplast(cons(z0, cons(z1, z2))), cons(log(last(cons(z1, z2))), x1))) by IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) ---------------------------------------- (278) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c15_2, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (279) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, z2)), x1) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z0, cons(z1, z2)))), x1))) by IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) ---------------------------------------- (280) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_2, c15_1, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (281) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_2 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(last(x_1)) = [1] + x_1 POL(le(x_1, x_2)) = [1] + x_1 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_1 + x_3 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (282) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_2, c15_1, c14_2, c14_1, c8_2, c15_3 ---------------------------------------- (283) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(droplast(cons(z0, nil)), cons(log(z0), x1)), LOG(z0)) by IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1)), LOG(0)) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(z0), x1)), LOG(z0)) ---------------------------------------- (284) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1)), LOG(0)) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(z0), x1)), LOG(z0)) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1)), LOG(0)) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(MAPITER(nil, cons(log(z0), x1)), LOG(z0)) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (285) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (286) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (287) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) ---------------------------------------- (288) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (289) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), DROPLAST(cons(x0, cons(z0, nil)))) by IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) ---------------------------------------- (290) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (291) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) by IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) ---------------------------------------- (292) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (293) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) by IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) ---------------------------------------- (294) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (295) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c14(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), DROPLAST(cons(x0, cons(z0, cons(z1, z2))))) by IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) ---------------------------------------- (296) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (297) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = 0 POL(IFMAP(x_1, x_2, x_3)) = [1] + [3]x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = 0 POL(MAPITER(x_1, x_2)) = [1] + x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_2 POL(double(x_1)) = [3]x_1 POL(droplast(x_1)) = x_1 POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [3] + [3]x_2 + [3]x_3 + [3]x_4 POL(last(x_1)) = 0 POL(le(x_1, x_2)) = [3]x_1 POL(log(x_1)) = [3] POL(logError) = [3] POL(loop(x_1, x_2, x_3)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = [3] ---------------------------------------- (298) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (299) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(0, nil), x1) -> c14(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) by IFMAP(false, cons(0, nil), x0) -> c14(MAPITER(nil, cons(logError, x0))) ---------------------------------------- (300) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(0, nil), x0) -> c14(MAPITER(nil, cons(logError, x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(0, nil), x0) -> c14(MAPITER(nil, cons(logError, x0))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c14(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), DROPLAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (301) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, cons(0, nil), x0) -> c14(MAPITER(nil, cons(logError, x0))) ---------------------------------------- (302) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c14_1, c8_2, c15_3, c15_2 ---------------------------------------- (303) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(s(z0), nil), x1) -> c14(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) by IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1))) ---------------------------------------- (304) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (305) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1))) ---------------------------------------- (306) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (307) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace LOOP(s(s(s(z0))), s(s(s(z1))), x2) -> c8(IF(le(z0, z1), s(s(s(z0))), s(s(s(z1))), x2), LE(s(s(s(z0))), s(s(s(z1))))) by LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(IF(true, s(s(s(0))), s(s(s(z0))), x2), LE(s(s(s(0))), s(s(s(z0))))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) ---------------------------------------- (308) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(IF(true, s(s(s(0))), s(s(s(z0))), x2), LE(s(s(s(0))), s(s(s(z0))))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(IF(true, s(s(s(0))), s(s(s(z0))), x2), LE(s(s(s(0))), s(s(s(z0))))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (309) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (310) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (311) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) by IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) ---------------------------------------- (312) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (313) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = x_2 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(last(x_1)) = [1] + x_1 POL(le(x_1, x_2)) = 0 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_3 POL(nil) = [1] POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (314) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (315) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) by IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) ---------------------------------------- (316) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (317) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = [1] + x_1 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(last(x_1)) = [1] + x_1 POL(le(x_1, x_2)) = 0 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_3 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (318) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (319) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), LOG(last(cons(z1, z2))), LAST(cons(z0, cons(z1, z2)))) by IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) ---------------------------------------- (320) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (321) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) by IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) ---------------------------------------- (322) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_3, c15_2, c14_1 ---------------------------------------- (323) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3)), LOG(last(cons(z0, cons(z1, z2)))), LAST(cons(x0, cons(z0, cons(z1, z2))))) by IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) ---------------------------------------- (324) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (325) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) ---------------------------------------- (326) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (327) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_2 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(last(x_1)) = [1] + x_1 POL(le(x_1, x_2)) = 0 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_3 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (328) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (329) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) by IFMAP(false, cons(0, nil), x0) -> c15(MAPITER(nil, cons(logError, x0))) ---------------------------------------- (330) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(0, nil), x0) -> c15(MAPITER(nil, cons(logError, x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(0, nil), x0) -> c15(MAPITER(nil, cons(logError, x0))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3)), LOG(last(cons(z0, nil))), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (331) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, cons(0, nil), x0) -> c15(MAPITER(nil, cons(logError, x0))) ---------------------------------------- (332) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (333) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1))) by IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1))) ---------------------------------------- (334) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (335) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1))) ---------------------------------------- (336) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (337) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, nil))), cons(log(z0), x3))) by IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) ---------------------------------------- (338) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (339) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(droplast(cons(x0, cons(z0, cons(z1, z2)))), cons(log(last(cons(z1, z2))), x3))) by IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) ---------------------------------------- (340) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (341) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) by IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) ---------------------------------------- (342) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (343) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, cons(z0, droplast(cons(z1, z2)))), cons(log(last(cons(x0, cons(z0, cons(z1, z2))))), x3))) by IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) ---------------------------------------- (344) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (345) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = [1] + x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_2 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(last(x_1)) = [1] + x_1 POL(le(x_1, x_2)) = 0 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_3 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (346) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c15_2, c14_1, c15_3 ---------------------------------------- (347) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(s(z0), nil), x1) -> c15(MAPITER(droplast(cons(s(z0), nil)), cons(loop(s(z0), s(0), 0), x1)), LOG(s(z0))) by IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) ---------------------------------------- (348) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(nil, cons(loop(s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2 ---------------------------------------- (349) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (350) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2 ---------------------------------------- (351) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = 0 POL(IFMAP(x_1, x_2, x_3)) = x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = 0 POL(MAPITER(x_1, x_2)) = x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = x_1 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(last(x_1)) = [1] + x_1 POL(le(x_1, x_2)) = 0 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_3 POL(nil) = 0 POL(s(x_1)) = [1] POL(true) = [1] ---------------------------------------- (352) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2 ---------------------------------------- (353) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(0, nil), x1) -> c15(MAPITER(droplast(cons(0, nil)), cons(logError, x1))) by IFMAP(false, cons(0, nil), x0) -> c15(MAPITER(nil, cons(logError, x0))) ---------------------------------------- (354) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) IFMAP(false, cons(0, nil), x0) -> c15(MAPITER(nil, cons(logError, x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, nil), cons(log(last(cons(x0, cons(z0, nil)))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2 ---------------------------------------- (355) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IFMAP(false, cons(0, nil), x0) -> c15(MAPITER(nil, cons(logError, x0))) ---------------------------------------- (356) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2 ---------------------------------------- (357) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) by IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) ---------------------------------------- (358) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2 ---------------------------------------- (359) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) by IFMAP(false, cons(x0, cons(s(x1), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(x1), nil))), cons(if(le(s(x1), s(0)), s(x1), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(x1), nil)))) IFMAP(false, cons(z0, cons(s(x1), nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(s(x1), nil))), cons(loop(s(x1), s(0), 0), x2)), DROPLAST(cons(z0, cons(s(x1), nil)))) ---------------------------------------- (360) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(x1), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(x1), nil))), cons(if(le(s(x1), s(0)), s(x1), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(x1), nil)))) IFMAP(false, cons(z0, cons(s(x1), nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(s(x1), nil))), cons(loop(s(x1), s(0), 0), x2)), DROPLAST(cons(z0, cons(s(x1), nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(x1), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(x1), nil))), cons(if(le(s(x1), s(0)), s(x1), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(x1), nil)))) IFMAP(false, cons(z0, cons(s(x1), nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(s(x1), nil))), cons(loop(s(x1), s(0), 0), x2)), DROPLAST(cons(z0, cons(s(x1), nil)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2 ---------------------------------------- (361) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), DROPLAST(cons(z0, cons(z1, nil)))) by IFMAP(false, cons(x0, cons(0, nil)), x2) -> c14(MAPITER(cons(x0, droplast(cons(0, nil))), cons(logError, x2)), DROPLAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c14(MAPITER(cons(x0, droplast(cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x2) -> c14(MAPITER(cons(x0, nil), cons(log(z0), x2)), DROPLAST(cons(x0, cons(z0, nil)))) ---------------------------------------- (362) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(x1), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(x1), nil))), cons(if(le(s(x1), s(0)), s(x1), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(x1), nil)))) IFMAP(false, cons(z0, cons(s(x1), nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(s(x1), nil))), cons(loop(s(x1), s(0), 0), x2)), DROPLAST(cons(z0, cons(s(x1), nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x2) -> c14(MAPITER(cons(x0, nil), cons(log(z0), x2)), DROPLAST(cons(x0, cons(z0, nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(x1), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(x1), nil))), cons(if(le(s(x1), s(0)), s(x1), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(x1), nil)))) IFMAP(false, cons(z0, cons(s(x1), nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(s(x1), nil))), cons(loop(s(x1), s(0), 0), x2)), DROPLAST(cons(z0, cons(s(x1), nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x2) -> c14(MAPITER(cons(x0, nil), cons(log(z0), x2)), DROPLAST(cons(x0, cons(z0, nil)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2 ---------------------------------------- (363) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFMAP(false, cons(x0, cons(z0, nil)), x2) -> c14(MAPITER(cons(x0, nil), cons(log(z0), x2)), DROPLAST(cons(x0, cons(z0, nil)))) We considered the (Usable) Rules: droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) And the Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(x1), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(x1), nil))), cons(if(le(s(x1), s(0)), s(x1), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(x1), nil)))) IFMAP(false, cons(z0, cons(s(x1), nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(s(x1), nil))), cons(loop(s(x1), s(0), 0), x2)), DROPLAST(cons(z0, cons(s(x1), nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x2) -> c14(MAPITER(cons(x0, nil), cons(log(z0), x2)), DROPLAST(cons(x0, cons(z0, nil)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(DOUBLE(x_1)) = 0 POL(DROPLAST(x_1)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_3 + x_4 POL(IFMAP(x_1, x_2, x_3)) = x_1 + x_2 POL(LAST(x_1)) = 0 POL(LE(x_1, x_2)) = 0 POL(LOG(x_1)) = 0 POL(LOOP(x_1, x_2, x_3)) = x_3 POL(MAPITER(x_1, x_2)) = x_1 POL(c(x_1)) = x_1 POL(c10(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c20(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_2 POL(double(x_1)) = [1] + x_1 POL(droplast(x_1)) = x_1 POL(false) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(last(x_1)) = [1] + x_1 POL(le(x_1, x_2)) = 0 POL(log(x_1)) = [1] POL(logError) = [1] POL(loop(x_1, x_2, x_3)) = [1] + x_3 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (364) Obligation: Complexity Dependency Tuples Problem Rules: double(0) -> 0 double(s(z0)) -> s(s(double(z0))) droplast(cons(z0, nil)) -> nil droplast(cons(z0, cons(z1, z2))) -> cons(z0, droplast(cons(z1, z2))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) le(s(z0), 0) -> false last(cons(z0, nil)) -> z0 last(cons(z0, cons(z1, z2))) -> last(cons(z1, z2)) Tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c14(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), DROPLAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, nil), cons(log(last(cons(z1, nil))), x2))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(x1), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(x1), nil))), cons(if(le(s(x1), s(0)), s(x1), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(x1), nil)))) IFMAP(false, cons(z0, cons(s(x1), nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(s(x1), nil))), cons(loop(s(x1), s(0), 0), x2)), DROPLAST(cons(z0, cons(s(x1), nil)))) IFMAP(false, cons(x0, cons(z0, nil)), x2) -> c14(MAPITER(cons(x0, nil), cons(log(z0), x2)), DROPLAST(cons(x0, cons(z0, nil)))) S tuples: LE(s(z0), s(z1)) -> c3(LE(z0, z1)) DOUBLE(s(z0)) -> c5(DOUBLE(z0)) LOG(s(z0)) -> c7(LOOP(s(z0), s(0), 0)) LAST(cons(z0, cons(z1, z2))) -> c20(LAST(cons(z1, z2))) DROPLAST(cons(z0, cons(z1, z2))) -> c23(DROPLAST(cons(z1, z2))) IF(false, x0, s(z0), x2) -> c10(LOOP(x0, s(s(double(z0))), s(x2)), DOUBLE(s(z0))) MAPITER(cons(z0, z1), x1) -> c12(IFMAP(false, cons(z0, z1), x1)) LOOP(s(x0), s(x1), x2) -> c8(LE(s(x0), s(x1))) LOOP(s(0), s(z0), x2) -> c8(LE(s(0), s(z0))) LOOP(s(s(z0)), s(0), x2) -> c(IF(false, s(s(z0)), s(0), x2)) LOOP(s(s(z0)), s(0), x2) -> c(LE(s(s(z0)), s(0))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c14(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3)), DROPLAST(cons(z0, cons(z1, z2)))) LOOP(s(s(s(z0))), s(s(0)), x2) -> c8(IF(false, s(s(s(z0))), s(s(0)), x2), LE(s(s(s(z0))), s(s(0)))) LOOP(s(s(x0)), s(s(x1)), x2) -> c8(LE(s(s(x0)), s(s(x1)))) LOOP(s(s(0)), s(s(z0)), x2) -> c8(LE(s(s(0)), s(s(z0)))) IFMAP(false, cons(z0, cons(z1, z2)), x3) -> c15(MAPITER(cons(z0, droplast(cons(z1, z2))), cons(log(last(cons(z1, z2))), x3))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c14(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), DROPLAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c14(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c14(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) LOOP(s(s(s(s(z0)))), s(s(s(s(z1)))), x2) -> c8(IF(le(z0, z1), s(s(s(s(z0)))), s(s(s(s(z1)))), x2), LE(s(s(s(s(z0)))), s(s(s(s(z1)))))) LOOP(s(s(s(s(z0)))), s(s(s(0))), x2) -> c8(IF(false, s(s(s(s(z0)))), s(s(s(0))), x2), LE(s(s(s(s(z0)))), s(s(s(0))))) LOOP(s(s(s(x0))), s(s(s(x1))), x2) -> c8(LE(s(s(s(x0))), s(s(s(x1))))) LOOP(s(s(s(0))), s(s(s(z0))), x2) -> c8(LE(s(s(s(0))), s(s(s(z0))))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2)), LOG(last(cons(0, nil))), LAST(cons(x0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2)), LOG(last(cons(s(z0), nil))), LAST(cons(x0, cons(s(z0), nil)))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2)), LOG(last(cons(z1, nil))), LAST(cons(z0, cons(z1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(z0, nil)), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, nil))), cons(log(last(cons(z0, nil))), x3)), LOG(z0), LAST(cons(x0, cons(z0, nil)))) IFMAP(false, cons(x0, cons(z0, cons(z1, z2))), x3) -> c15(MAPITER(cons(x0, droplast(cons(z0, cons(z1, z2)))), cons(log(last(cons(z0, cons(z1, z2)))), x3)), LOG(last(cons(z1, z2))), LAST(cons(x0, cons(z0, cons(z1, z2))))) IFMAP(false, cons(x0, cons(x1, x2)), x3) -> c15(MAPITER(cons(x0, droplast(cons(x1, x2))), cons(log(last(cons(x1, x2))), x3)), LAST(cons(x0, cons(x1, x2)))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4)), LOG(last(cons(z1, cons(x2, x3)))), LAST(cons(z0, cons(z1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4)), LOG(last(cons(x1, cons(z0, cons(z1, z2))))), LAST(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1))) IFMAP(false, cons(x0, cons(0, nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(0, nil))), cons(logError, x2))) IFMAP(false, cons(x0, cons(s(z0), nil)), x2) -> c15(MAPITER(droplast(cons(x0, cons(s(z0), nil))), cons(loop(s(z0), s(0), 0), x2))) IFMAP(false, cons(z0, cons(z1, nil)), x2) -> c15(MAPITER(cons(z0, droplast(cons(z1, nil))), cons(log(z1), x2))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, nil)))), cons(log(z0), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(droplast(cons(x0, cons(x1, cons(z0, cons(z1, z2))))), cons(log(last(cons(z1, z2))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, droplast(cons(z1, cons(x2, x3)))), cons(log(last(cons(x2, x3))), x4))) IFMAP(false, cons(z0, cons(z1, cons(x2, x3))), x4) -> c15(MAPITER(cons(z0, cons(z1, droplast(cons(x2, x3)))), cons(log(last(cons(z1, cons(x2, x3)))), x4))) IFMAP(false, cons(x0, cons(x1, cons(z0, cons(z1, z2)))), x4) -> c15(MAPITER(cons(x0, cons(x1, cons(z0, droplast(cons(z1, z2))))), cons(log(last(cons(x0, cons(x1, cons(z0, cons(z1, z2)))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(MAPITER(droplast(cons(s(x0), nil)), cons(if(le(s(x0), s(0)), s(x0), s(0), 0), x1)), LOG(s(x0))) IFMAP(false, cons(z0, cons(0, nil)), x1) -> c14(MAPITER(cons(z0, droplast(cons(0, nil))), cons(logError, x1)), DROPLAST(cons(z0, cons(0, nil)))) IFMAP(false, cons(x0, cons(s(x1), nil)), x2) -> c14(MAPITER(droplast(cons(x0, cons(s(x1), nil))), cons(if(le(s(x1), s(0)), s(x1), s(0), 0), x2)), DROPLAST(cons(x0, cons(s(x1), nil)))) IFMAP(false, cons(z0, cons(s(x1), nil)), x2) -> c14(MAPITER(cons(z0, droplast(cons(s(x1), nil))), cons(loop(s(x1), s(0), 0), x2)), DROPLAST(cons(z0, cons(s(x1), nil)))) K tuples: IFMAP(false, cons(z0, nil), x1) -> c15(LOG(z0)) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c14(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), DROPLAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, nil)), x2) -> c15(LOG(last(cons(x1, nil)))) IFMAP(false, cons(x0, cons(x1, cons(x2, x3))), x4) -> c15(LOG(last(cons(x1, cons(x2, x3))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4)), LOG(last(cons(x1, cons(z0, nil)))), LAST(cons(x0, cons(x1, cons(z0, nil))))) IFMAP(false, cons(x0, cons(x1, cons(z0, nil))), x4) -> c15(MAPITER(cons(x0, cons(x1, nil)), cons(log(last(cons(x0, cons(x1, cons(z0, nil))))), x4))) IFMAP(false, cons(s(x0), nil), x1) -> c15(LOG(s(x0))) IFMAP(false, cons(x0, cons(z0, nil)), x2) -> c14(MAPITER(cons(x0, nil), cons(log(z0), x2)), DROPLAST(cons(x0, cons(z0, nil)))) Defined Rule Symbols: double_1, droplast_1, log_1, loop_3, if_4, le_2, last_1 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LAST_1, DROPLAST_1, IF_4, MAPITER_2, LOOP_3, IFMAP_3 Compound Symbols: c3_1, c5_1, c7_1, c20_1, c23_1, c10_2, c12_1, c8_1, c_1, c15_1, c14_2, c8_2, c14_1, c15_3, c15_2